java наследование и private

165
28 мая 2022, 00:40

Есть 2 класса,КлассА и КлассБ ClassA.java->

 package com.company;
    public class ClassA {
    
        private int x;
        private int y;
    
        public ClassA() {
            x = 0;
            y = 0;
        }
        public ClassA(int x1, int y1) {
            x = x1;
            y = y1;
        }
    
    
    
        public void print() {
            System.out.print(x + " " + y + " ");
        }
    
        public String toString() {
            return x + " " + y + " ";
        }
    
        public void set(int x1, int y1) {
            x = x1;
            y = y1;
        }
    }

ClassB.java->

  package com.company;
    
    public class ClassB extends ClassA{
    
       private int z;
       public ClassB() {
           x = 0;
           y = 0;
           z = 0;
       }
    
       public ClassB(int x1,int y1,int z1) {
           x = x1;
           y = y1;
           z = z1;
       }
    
       public void print(){
           System.out.println(x + " " + y + " " + z);
       }
       public String toString() {
           return x + " " + y + " " + z;
       }
    
       public void set(int x1,int y1,int z1) {
           x = x1;
           y = y1;
           z = z1;
       }
    }

На Классе А есть 2 переменных с модификаторм private.Класс Б наследует Класс А,можно ли через класс Б получить доступ к переменным с модификатором private который является переменными класса А.(Если компилировать в этом виде то выдает ошибку что Класс Б не может использовать переменные с мод. private который является переменными класса А)

Answer 1

Для доступа дочерним классам используется модификатор protected.

А вообще, можно всё переписать не используя x и y:

public class ClassB extends ClassA{
   private int z;
   public ClassB() {
       super();
       z = 0;
   }
   public ClassB(int x1,int y1) {
       super(x1, y1);
       z = 0;
   }
   public ClassB(int x1,int y1,int z1) {
       super(x1, y1);
       z = z1;
   }
   public void print(){
       super.print();
       System.out.println(z);
   }
   public String toString() {
       return super.toString() + z;
   }
   public void set(int x1,int y1,int z1) {
       super.set(x1, y1);
       z = z1;
   }
}

Лучше переписать метод print(), чтобы он использовал свой toString()

Answer 2

переменные private работают только в классе. Используй public или вообще без модификатора доступа.

Если тебе нужно сохранить значения класса А и использовать в классе B, то добавить final

READ ALSO
Как получить номер фискального регистратора ШТРИХ-М-02Ф?

Как получить номер фискального регистратора ШТРИХ-М-02Ф?

Мне нужно программно получить полный номер фискального регистратора(ФР), я использую метод getPhysicalDeviceName:

123
Кнопка back не работает WebView

Кнопка back не работает WebView

Необходимо сделать, чтобы при нажатии кнопки Back на телефоне приложение не закрывалосьНашел код на форуме, вроде бы расставил все куда нужно,...

211
Отсутствует доступ к сервлету

Отсутствует доступ к сервлету

Изучаю тему сервлетовСтолкнулся с такой проблемой, что html и jsp работают, однако когда я пытаюсь зайти на страницу сервлета (адрес http://localhost:8080/SE/hello),...

116
QuerySyntaxException: User is not mapped

QuerySyntaxException: User is not mapped

Подскажите, пожалуйста, в чем может быть проблемаПосле запуска spring-boot приложения и попытки аутентификации, появляется exception:

338