继承的基本概念:继承就是扩展已有的功能,在继承中有父类和子类,父类有时候又称为超类 ,子类又称为派生类。
1子类不能多重继承:一个子类只能继承一个父类,一个孩子只能有一个亲爸。
2子类可以多层继承:一个子类能继承一个父类,父类还能继承别的类。一个孩子有了一个爸爸,但爸爸还有爸爸。
3在继承中子类不能访问父类的私有操作,而只能访问父类的公共操作。对于私有的操作,不能直接访问,但是可以通过别的方式来访问。
子类的实例化过程。
总是先执行父类中的构造方法,然后才调用子类自己的构造方法,为什么会这样?
构造方法的主要目的:为类中的属性提供初始化。
在实例化子类对象的时候,肯定要先实例化父类中的内容,为父类初始化。
方法的覆写:
class A{
public void fun(){
}
} ;
class B extends A{
public void fun(){//方法的复写
}
} ;
子类中定义和父类中相同的方法,称为方法的覆写。需要注意访问权限的问题。
class A{
public void fun(){
System.out.println("A类中定义的方法") ;
}
} ;
class B extends A{
public void fun(){//方法的复写
System.out.println("B类中定义的方法") ;
}
} ;
public class OverrideDemo01{
public static void main(String args[]){
B b = new B() ;
b.fun() ;
}
}
执行结果是“B类中定义的方法”,所以调用的是B类中的fun()方法。也就是调用的是子类中的方法。
思考:
如果父类中使用了private权限,而子类中使用了default权限,那么这样的操作叫覆写吗?
在调用之前,一定要掌握一个原则,只要是使用子类时候对象,调用的方法也被子类覆写过的话,则调用的永远是覆写过的操作。
class A{
private void fun(){
System.out.println("A类中定义的方法") ;
}
public void print(){
this.fun() ;
}
} ;
class B extends A{
void fun(){//方法的复写
System.out.println("B类中定义的方法") ;
}
} ;
public class OverrideDemo03{
public static void main(String args[]){
B b = new B() ;
b.print() ;
}
}
执行结果,:“A类中的方法”
记住:远不是覆写,而是重新定义。
如果想调用父类中被子类覆盖过的方法,只能通过"super.方法()"的方式来调用。
class A{
public void fun(){
System.out.println("A类中定义的方法") ;
}
} ;
class B extends A{
public void fun(){//次方法实际上属于新建的一个方法。
super.fun() ;//调用父类中的fun方法
System.out.println("B类中定义的方法") ;
}
} ;
public class OverrideDemo04{
public static void main(String args[]){
B b = new B() ;
b.fun() ;
}
}