一、简述
继承是面向对象最显著的一个特性。java只支持单继承,但是可以实现多个接口。
面向对象的角度来说,继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。
条件:
在继承关系中。父类和子类需要满足is-a的关系。子类是父类。
作用:
使用继承可以有效实现代码复用,避免重复代码的出现。
当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。
public class ExtendDemo {
public static void main(String[] args) {
Foo a = new Aoo();
System.out.println(a.name);
Aoo b = (Aoo) a;
System.out.println(b.name);
}
}
class Foo{
public String name="FooName";
{
System.out.println("Foo代码块");
}
static{
System.out.println("Foo static代码块");
}
public Foo(int a){
System.out.println("Foo()");
}
public void method(){
}
}
class Aoo extends Foo{
public int name=1111;
{
System.out.println("Aoo代码块");
}
static{
System.out.println("Aoo static代码块");
}
public Aoo(){
super(1);
System.out.println("Aoo()");
}
}
运行结果:
子类Aoo继承父类Foo的属性和方法,在创建子类Aoo的对象时,Aoo的构造函数会先调用父类的构造方法,所以,继承其实是在父类对象之外包上子类的一些新的属性,方法,如果方法名相同,参数列表相同,就是方法的重写。父类的属性也会被继承,调用时可以使用super.。
二、重写
1.定义:
在子类继承父类的属性方法后,有些方法需要进行拓展,就需要用到重写。
如果在子类中定义的一个方法,其名称、返回类型及参数列表正好与父类中某个方法的名称、返回类型及参数列表相匹配,那么可以说,子类的方法重写了父类的方法。
2.与重载的区别:
(1)重写(Override):
发生在父子类中,方法名称相同,参数列表相同,方法体不同
遵循"运行期绑定",根据对象的类型来调用方法
(2)重载(Overload):
发生在一个类中,方法名称相同,参数列表不同,方法体不同
遵循"编译期绑定",根据引用的类型来绑定调用方法
3.重写方法的规则:
重写遵循两同两小一大
两同:方法名相同,参数列表相同
两小:返回值类型,抛出的异常类型小于父类
一大:修饰符大于父类
其实就是子类方法相对于父类方法,方法名参数列表相同,有更小的返回值,异常类型,但是访问权限要比父类的大。