Je suis nouveau à Java et OOP,Puis-je rendre public un membre protégé en Java? Je veux accéder à partir d'une sous-classe
J'utilisais une sous-classe privée (en fait une struct) B dans une classe A, et tout s'est bien passé jusqu'à ce que je décide de faire un classe parent C pour la sous-classe B. Je veux rendre publics certains des membres protégés de la classe C.
par exemple:
public class A {
private class B extends C {
public int product;
public int x;
public int y;
public void add() {
product=x+y;
}
}
B b=new B;
b.x=1;
b.y=2;
b.multiply();
System.out.println(b.product+"="+b.x+"x"+b.y);
public class C {
protected int x;
protected int y;
public int sum;
public C(px,py) {
x=px;
y=py;
}
public void sum() {
sum=x+y;
}
}
Et je reçois
const super implicite Le propriétaire C() n'est pas défini pour le constructeur par défaut. Doit définir un constructeur explicite
Bien sûr, je pourrais supprimer étend C, et revenir à ce que j'avais avant. Ou je pourrais faire un getter/setter. Mais je pense qu'il est compréhensible qu'une structure interne soit acceptable, et qu'elle devrait pouvoir étendre d'autres classes.
wow, qui était rapide grâce à la 3^10 m/s réponse ... Je viens de me douter que j'avais besoin d'un constructeur par défaut protégé – TiansHUo
@Skeet: Voulez-vous vraiment qu'une instance de B ait deux champs x et deux champs y? Vous réalisez qu'ils seront des champs séparés, n'est-ce pas? Non, je ne comprends pas ce que vous voulez dire par les champs séparés? Cela fonctionnera-t-il quand j'appellerai sum() qui se trouve dans la superclasse C? – TiansHUo
@TiansHUo: Non, sum() somme les champs déclarés en C, qui sont entièrement séparés des champs déclarés en B. (Je devrais également souligner que 'product()' et 'sum()' seraient probablement les meilleurs retourner la valeur plutôt que de la placer dans un autre champ.) –