Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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

Здравствуйте еще раз
Решил для себя написать небольшой пример без использования 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 Кб, 0 просмотров)

Последний раз редактировалось Java.; 12.08.2018 в 19:00.
Java. вне форума   Ответить с цитированием
Старый 12.08.2018, 19:02   #3
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,511
Репутация: 3242

icq: 512-765
skype: alexp.frl
По умолчанию

Ну так проверьте свое подозрение.
Alex11223 на форуме   Ответить с цитированием
Старый 14.08.2018, 20:28   #4
Java.
Новичок
 
Регистрация: 11.08.2018
Сообщений: 3
Репутация: 10
По умолчанию

Исправил следующие ошибки:
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. вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


16:43.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru