覆写-重写(override)
覆写-重写(override)
如果子类定义了与父类完全相同(不算权限)的方法或者属性的时候,这种操作就称为覆写。
1.方法的覆写
子类定义了与父类方法名称,参数列表,方法返回值完全相同的方法。子类不能拥有比父类更严格的访问控制权限。(并且不能出现private关键字)。
判断调用的是父类方法还是子类方法:
a.看new()在哪(当前使用的对象是通过哪个类new的)
b.调用的方法有没有被子类覆写,如果被覆写,调用的一定是被覆写后的方法
class Person{
public void fun(String str){
System.out.println("我是爸爸!");
}
}
class Student extends Person{
public void fun(String str){
System.out.println("我是儿子!");
}
}
public class test{
public static void main(String[] args){
//向上转型
Person per = new Student();
//调用的是被子类覆写后的方法
per.fun("test");
}
}
关键字的权限:
private < default(啥也不写)---包访问权限< public
如果父类用default,子类可以用default也可以用public
如果父类用public,子类只能用public
方法覆写不能出现private
class Person{
public void print(){
this.fun("test");
}
private void fun(String str){
System.out.println("我是爸爸!");
}
}
class Student extends Person{
public void fun(String str){
System.out.println("我是儿子!");
}
}
public class test{
public static void main(String[] args){
Student stu = new Student();
stu.print();
}
}
2.属性的覆写(一般情况下,属性被private封装,不可能被覆写)
class Person{
public String name = "Person";
}
class Student extends Person{
public String name = "Student";
}
public class test{
public static void main(String[] args){
System.out.println(new Student().name);
}
}
方法重载和方法覆写的区别: