extends不用多说,是来继承的关键字,但它有几个要点:
- java不允许多重继承(一个类只能继承一个父类,不能继承多个父类)
- 派生类会继承基类所有属性和方法,但不能直接访问基类的private私有属性
- 实例化派生类时,会先去调用父类的构造方法构造基类,再实例化自身的属性类对象,最后才是调用自身类构造方法.
- 在派生类中,有个隐藏的super,表示为基类,所以我们可以通过它指定如何构造基类
JAVA继承方法总结
重写方法的时候,要注意方法的权限,返回值,以及参数部分一致
class txxx
{
public void func(int i)
{
System.out.println("Parent::func()");
}
}
class Derived extends txxx
{
public void func(int i) //覆写父类的func方法
{
System.out.println("Derived::func()");
}
}
public class AT{
public static void main(String args[]){
Derived d = new Derived();
d.func(1);
}
}
如果派生类覆写的基类方法是private的,则不能实现覆写功能,因为基类的private方法是不可见的,派生类覆写方法,一般用于基类的方法不满足当前派生类功能实现时,才会去覆写.
class Parent
{
public void func()
{
System.out.println("Parent::func()");
}
public void print()
{
func();
}
}
class Derived extends Parent
{
public void func() //覆写父类的func方法
{
System.out.println("Derived::func()");
}
}
public class Test{
public static void main(String args[]){
Derived d = new Derived();
d.print();
}
}
如果将public void func()改为private void func()的话,则无法实现覆写
当在某个类的方法前面定义final时,则表示该方法不允许在子类里进行方法覆写(可以实现方法重载)
在java中,final被称为终结器, final可以修饰变量,方法和类.
class A {
public final void fun() {} //此方法不允许子类覆写
public void fun(int i) {} //可以实现方法重载
}
class B extends A {
public void fun() {} // 错误:此处不允许覆写
}