наследование и использование метода main в своем собственном классе / пакете - PullRequest
0 голосов
/ 03 октября 2018

Итак, у меня есть класс публикации на бумаге с защищенными переменными и собственным пакетом.

Затем у меня есть класс книги, расширяющий публикацию на бумаге.Этот класс книги затем имеет 3 класса, которые расширяют класс книги (все три одинаковых пакета)

класс книги имеет защищенные переменные, а классы расширенной книги имеют пакет private.

Теперь, когда я создаю драйверв новом классе с его собственным пакетом я не могу вызвать любую переменную напрямую

package paperPublication;

public class PaperPublication {

protected String title;
protected double price;



package book;

import paperPublication.PaperPublication;

public class Book extends PaperPublication {
protected long ISBN;
protected int issueYear;


package book;

public class ChildrenBook extends Book {

int minimumAge;

Затем мой класс драйвера, который все испортил ... и я понял почему, так как он находится в своем собственном пакете / классе.но .... я не могу понять, как заставить это работать должным образом

package driver;

import book.*;
import paperPublication.PaperPublication;

public class Driver{
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Book a = new Book();
    System.out.println(a.ISBN);
    System.out.println(a.title);

isbn и название не может быть получено ... сделайте общедоступным.; (это не то, что я хочу. Также у меня уже есть все конструкторы.

цель моего проекта - использовать защищенные, общедоступные, приватные, пакетные приватные целые, строки и т. д., используя присущи и тестироватьконфиденциальность, создавая объекты и вызывая прямые переменные, такие как book.title или book.isbn, из переменных, хранящихся в конструкторах основного метода

1 Ответ

0 голосов
/ 03 октября 2018

Вы не можете получить доступ к private или protected переменным, таким как isbn или title напрямую из класса Driver.Это просто не скомпилируется.Доступ к переменным или методам за пределами их предполагаемой области конфиденциальности не будет компилироваться.Таким образом, это прямо включает тест на конфиденциальность, который вы ищете, и служит доказательством того, что модификаторы доступа работают.

Если вы действительно хотите иметь возможность доступа к private и protected переменным из-за пределов их предполагаемой конфиденциальности, тогда вы будете использовать шаблоны проектирования, упомянутые ниже:

Есть много способов (шаблоны проектирования, которые вы можете использовать), чтобы приблизиться к этому.Обычным способом было бы добавить методы получения и установки в класс для доступа к его свойствам.

Класс PaperPublication:

package paperPublication;

public class PaperPublication {

   protected String title;
   protected double price;

   public String getTitle() {
      return title;
   }

   public void setTitle(String title) {
      this.title = title;
   }

   public double getPrice() {
      return price;
   }

   public void setPrice(double price) {
      this.price = price;
   }
}

Класс книги:

package book;

import paperPublication.PaperPublication;

public class Book extends PaperPublication {
   protected long isbn;
   protected int issueYear;

   public long getIsbn() {
      return isbn;
   }

   public void setIsbn(long isbn) {
      this.isbn = isbn;
   }

   public int getIssueYear() {
      return issueYear;
   }

   public void setIssueYear(int issueYear) {
      this.issueYear = issueYear;
   }
}

Класс драйвера:

package driver;

import book.*;
import paperPublication.PaperPublication;

public class Driver {
   public static void main(String[] args) {
      Book a = new Book();
      a.setIsbn(123456789L);
      a.setTitle("Best book ever!");
      System.out.println(a.getIsbn());
      System.out.println(a.getTitle());
   }
}

Другой шаблон проектирования будет иметь только геттеры, и вы сможете установить значение один раз при создании объекта:

PaperPublication class:

package paperPublication;

public class PaperPublication {

   protected String title;
   protected double price;

   public PaperPublication(String title, double price) {
       this.title = title;
       this.price = price;
   }

   public String getTitle() {
      return title;
   }

   public double getPrice() {
      return price;
   }
}

Книжный класс:

package book;

import paperPublication.PaperPublication;

public class Book extends PaperPublication {
   protected long isbn;
   protected int issueYear;

   public Book(long isbn, int issueYear, String title, double price) {
      this.super(title, price);
      this.isbn = isbn;
      this.issueYear = issueYear;
   }

   public long getIsbn() {
      return isbn;
   }

   public int getIssueYear() {
      return issueYear;
   }
}

Класс водителя:

package driver;

import book.*;
import paperPublication.PaperPublication;

public class Driver {
   public static void main(String[] args) {
      // things are set in the constructor, and then you can only read, not change the values.
      Book a = new Book(123456789L, 2018, "Best book ever!", 19.99);
      System.out.println(a.getIsbn());
      System.out.println(a.getTitle());
   }
}

Есть еще несколько способов, все зависит от ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...