Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2018, 23:02   #1
Java.
 
Регистрация: 10.08.2018
Сообщений: 4
По умолчанию Помогите разобраться с инкапсуляцией

Приветствую всех(не буду писать что я новичок в Java )

Не могу понять на что влияют модификаторы доступа(private, protected, public) при объявлении классов или интерфейсов?
На то кому они будут доступны внутри пакета? С полями и методами вроде все понятно а вот именно с самими классами нет.

Очень буду рад за максимально простой пример.

Последний раз редактировалось Java.; 11.08.2018 в 16:52.
Java. вне форума Ответить с цитированием
Старый 12.08.2018, 16:31   #2
Java.
 
Регистрация: 10.08.2018
Сообщений: 4
По умолчанию

Здравствуйте еще раз
Решил для себя написать небольшой пример без использования IDE и попробовать лучше понять темы: 1. инкапсуляция 2. наследование
3. абстракция и также принцип использования пакетов. После разбития кода по пакетам компилятор начал ругаться на два метода GetName и GetAge. Не могу понять в чем проблема, подозреваю что дело в том что данные методы объявлены в пакетах как protected, но этот модификатор доступа мною был выбран специально что бы унаследовать эти методы(точнее унаследовались они бы и с privat но были бы не доступны)

Структура каталогов:
Код:
app\src\com\somedomain\TestApp.java
app\src\com\somedomain\objects\animal.java
app\src\com\somedomain\objects\bacteri.java
Компилирую:
Код:
javac  -sourcepath ./src -d bin /src/com/somedomain/TestApp.java
Ошибки:
Код:
.\src\com\somedomain\objects\animal.java:4: error: cannot find symbol
 class animal extends backteri {
                      ^
  symbol: class backteri
src\com\somedomain\TestApp.java:38: error: cannot find symbol
               System.out.println("\nBacteri was successfully added!\nName: " +a[i].GetName()+ " Sound: " +a[i].GetSound()+ " Age: " +a[i].GetAge()+ "\n");
                                                                                   ^
  symbol:   method GetName()
  location: class animal
src\com\somedomain\TestApp.java:38: error: cannot find symbol
               System.out.println("\nBacteri was successfully added!\nName: " +a[i].GetName()+ " Sound: " +a[i].GetSound()+ " Age: " +a[i].GetAge()+ "\n");
                                                                                                                                          ^
  symbol:   method GetAge()
  location: class animal
3 errors
TestApp.java
Код:
import com.somedomain.objects.animal; //Импортирую класс animal из пакета object
import com.somedomain.objects.bacteri; //Импортирую класс bacteri из пакета object
import java.util.Scanner;

public class TestApp {
	public static void main(String[] args) {
		
      animal[] a = new animal[1000];
      Scanner in = new Scanner(System.in);
      String[] name = new String[32];
	  String[] sound = new String[32];
	  int[] age = new int[32];
	  char command_cmd=0;
	  int count=0;
	 
	  for(int i=0; command_cmd != 'n'; i++) {
			 System.out.println("name: ");
			 name[i]=in.nextLine();	
			 System.out.println("sound: ");
			 sound[i]=in.nextLine();
		     System.out.println("age: ");
			
		     if (in.hasNextInt()) 
				age[i]=in.nextInt();	
			   else {
				  System.out.println("Please input the number! \nTry again!");
				  break;
			   }

               System.out.println("Continue Y/N ?: ");	
               command_cmd=in.next().charAt(0);
			   a[i] = new animal(name[i], sound[i], age[i]);
               System.out.println("\nBacteri was successfully added!\nName: " +a[i].GetName()+ " Sound: " +a[i].GetSound()+ " Age: " +a[i].GetAge()+ "\n");
              
			   in.nextLine();  			  
	  }
	}
}
animal.java
Код:
package com.somedomain.objects;           //объявляю что данный класс находится в пакете(пространстве имен) objects
import com.somedomain.objects.bacteri;  //Импортирую класс bacteri из пакета object

 class animal extends backteri {
	 protected String sound;
	 
	 animal(String name, String sound, int age) {
		  super(name, age);
		  this.sound=sound;
	  }
	  
	 protected String GetSound() {
		 return sound;
	 }
	 
	 protected void SetSound(String type) {
		 this.sound=sound;
	 }
 }
bacteri.java
Код:
package com.somedomain.objects;  //объявляю что данный класс находится в пакете(пространстве имен) objects
 
 abstract class bacteri {
      protected String name;
	  protected int age;
	  
	  bacteri(String name, int age) {
		  this.name=name;
		  this.age=age;
	  }
	  
	  protected int GetAge() {
		 return age;
	  }
	  
	  protected String GetName() {
		  return name;
	  }
	  
	  protected void SetName(String name) {
		  this.name=name;
	  }
	  
	  protected void SetAge(int age) {
		  this.age=age;
	  }
 }
Вложения
Тип файла: zip app.zip (2.3 Кб, 5 просмотров)

Последний раз редактировалось Java.; 12.08.2018 в 18:00.
Java. вне форума Ответить с цитированием
Старый 12.08.2018, 18:02   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так проверьте свое подозрение.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.08.2018, 19:28   #4
Java.
 
Регистрация: 10.08.2018
Сообщений: 4
По умолчанию

Исправил следующие ошибки:
1. В animal название класса с backteri на bacteri
2. Сделал гетеры и сетеры в bacteri и animal публичными
3. Сделал классы animal и bacteri public

После всех этих исправлений программка скомпилировалась удачно:
Код:
javac  -sourcepath ./src -d bin src/com/somedomain/TestApp.java
Но вот не выходит запустить, при этом файл TestApp после компилирования появляется в каталоге somedomain
Код:
java -classpath /bin com.somedomain.TestApp
Пишет что не может найти указанный класс в данном каталоге:
Код:
Error: Could not find or load main class com.somedomain.TestApp
TestApp
Код:
package com.somedomain.testapp;

import java.util.Scanner;
import com.somedomain.objects.animal;
import com.somedomain.objects.bacteri;

  
public class TestApp {
	public static void main(String[] args) {
		
      animal[] a = new animal[1000];
      Scanner in = new Scanner(System.in);
      String[] name = new String[32];
	  String[] sound = new String[32];
	  int[] age = new int[32];
	  char command_cmd=0;
	  int count=0;
	  
	 
	  for(int i=0; command_cmd != 'n'; i++) {
			 System.out.println("name: ");
			 name[i]=in.nextLine();	
			 System.out.println("sound: ");
			 sound[i]=in.nextLine();
		     System.out.println("age: ");
			
		     if (in.hasNextInt()) 
				age[i]=in.nextInt();	
			   else {
				  System.out.println("Please input the number! \nTry again!");
				  break;
			   }

               System.out.println("Continue Y/N ?: ");	
               command_cmd=in.next().charAt(0);
			   a[i] = new animal(name[i], sound[i], age[i]);
               System.out.println("\nBacteri was successfully added!\nName: " +a[i].GetName()+ " Sound: " +a[i].GetSound()+ " Age: " +a[i].GetAge()+ "\n");
              
			   in.nextLine();  			  
	  }
	}
}
animal
Код:
package com.somedomain.objects; 

import com.somedomain.objects.bacteri;

public class animal extends bacteri {
	 protected String sound;
	 
	 public animal(String name, String sound, int age) {
		  super(name, age);
		  this.sound=sound;
	  }
	  
	 public String GetSound() {
		 return sound;
	 }
	 
	 public void SetSound(String type) {
		 this.sound=sound;
	 }
 }
bacteri
Код:
package com.somedomain.objects; 

public abstract class bacteri {
      protected String name;
	  protected int age;
	  
	  bacteri(String name, int age) {
		  this.name=name;
		  this.age=age;
	  }
	  
	  public int GetAge() {
		 return age;
	  }
	  
	  public String GetName() {
		  return name;
	  }
	  
	  public void SetName(String name) {
		  this.name=name;
	  }
	  
	  public void SetAge(int age) {
		  this.age=age;
	  }
	   
 }
Java. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться! Дима я Общие вопросы C/C++ 2 21.12.2009 18:31
Помогите разобраться! gameskiller Свободное общение 1 28.11.2009 18:57
Помогите разобраться rainbow Паскаль, Turbo Pascal, PascalABC.NET 45 04.04.2009 20:46
Помогите разобраться Toxass Общие вопросы Delphi 2 18.12.2008 16:57