个人认为
1、继承也是某种形式的“访问”
2、子类可以继承父类的public,protected成员(不管在不在同一个package中),同一package中还可以继承friendly成员
3、子类不可以继承父类的private成员(同一package中也不行)
1、继承也是某种形式的“访问”
2、子类可以继承父类的public,protected成员(不管在不在同一个package中),同一package中还可以继承friendly成员
3、子类不可以继承父类的private成员(同一package中也不行)
class baseclass {
private int i = 10;
public int geti(){
return i;
}
public void seti(int i){
this.i = i;
}
}
public class driveclass extends baseclass{
public static void main(String[] args){
driveclass x = new driveclass();
x.seti(20);
System.out.println("i = "+x.geti());
}
}
首先有个基类Parent吧
public class Parent {
private int friendly_Value; //忘记友元变量是怎么写的了,是不是直接写int friendly_Value就可以啦?:)
public void init_value() {
//直接设置该友元变量
friendly_Value:= 100 ;
}
public void set_value(int value) {
friendly_Value:= value ;
}
}接下来在另一个package中定义它的子类Child
public class Child extended Parent {
//下面继承方法init_value
public void init_value() {
//直接设置该友元变量
//由于不能跨package使用友元变量,因此以下的语句应该是非法的吧
friendly_Value:= 200 ;
//取而代之,我们可以使用别的方法来访问该友元变量。当然,如果父类没有给出这样的访问方法就没辙了
set_value(200) ;
}}
顺便说一下,其实不光是友元变量,任何变量应该都是可以继承的吧
例如有以下parent类
public class Parent {
protect int protected_Value=10; //受保护的变量,可以在它的子类中访问该变量
public void init_value() {
protected_Value:= 100 ;
}
public int get_value() {
return protected_Value ;
}
}然后有以下Child类
public class Child extended Parend {
protect int protected_Value; //"继承"变量?
public void init_value() {
protected_Value:= 200 ;
}
}最后...
Child c= new Child() ;
c.init_value() ;
System.out.println(c.get_value()) ;没有试过,甚至不知道这种写法是否可行,不过我 猜
protected_Value在 Child里其实是定义了两次
"Parent".protected_Value和 "Child".protected_Value,
在Child中重载的init_value()方法中访问的是"Child".protected_Value,
而get_value()由于没有在Child中重载,使用的仍然是"Parent".protected_Value。
c.get_value()出来的结果应该是"Parent".protected_Value的初始值 即 10不知道猜得是否正确:P
不知道是不是这个意思:
private方法是不可以被子类访问的,子类只可以访问public或protected地方法
public和protected的区别在于
一个类在包外继承类他,那么它只能访问到这个父类的public成员
不能访问protected的成员。