权限 | 访问性 | 继承性 | |||
---|---|---|---|---|---|
类内部 | 同包类内部 | 不同包类内部 | 同包子类 | 不同包子类 | |
public | √ | √ | √ | √ | √ |
protected | √ | √ | × | √ | √ |
友好(friendly) | √ | √ | × | √ | × |
private | √ | × | × | × | × |
由高到低:public--protected-友好的--private
如果声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),子类就会隐藏继承的成员变量。
子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。
重写方法体的内容
被重写的方法 | 重写的方法 |
---|---|
public | public |
protected | public/protected |
友好 | public/protected/友好 |
super用法:
super和this用法相像之处:
this代表本类对象的引用 super代表父类的内存空间的标识
一个小问题:
在同一个构造函数中this()和super()能不能同时出现?
(答案当然是不能的)
上转型对象的用法如下:
class A{
void f(){
System.out.println("A中f方法");
}
}
class B extends A{
void f(){
System.out.println("B中f方法");
}
}
public class Test{
public static void main(String args[]){
A xx=new B(); xx是B对象的上转型对象
xx.f();
}
}
子类的上转型对象只能调用重写的方法,不能调用子类新增的方法 把上转型对象强制转化为子类的对象 具体代码解释如下:
class Animal{
void f(String s){
System.out.println("Animal中f方法"+s);
}
}
class Cat extends Animal{
void f(String s){
System.out.println("Cat中f方法"+s);
}
void eat(){
System.out.println("Cat中eat方法");
}
}
public class Test{
public static void main(String args[]){
Animal xx=new Cat(); xx是Cat对象的上转型对象
xx.f("上转型对象");
// xx.eat();
子类的上转型对象只能调用重写的方法,不能调用子类新增的方法
Cat yy=(Cat)xx; 把上转型对象强制转化为子类的对象
yy.f("子类的对象");
}
}
输出结果为:
Cat中f方法上转型对象
Cat中f方法子类的对象