浅谈继承
继承的基本语法:
类结构的基本单位是属性和方法;
继承是开发追求代码重用性的产物;
在java中,被继承的类称之为父类,继承的类称之为子类;
如:public class sub extends base{}
1.如果sub与base位于同一个包中,sub继承base定义中的Public,protected,默认访问级别的成员变量与成员方法;
2.如果sub与base位于不同的包中,sub继承base中定义的public,protected访问级别的成员变量与成员方法;
【 一个类只能有一个直接父类;】
如;public class a extends b,c,d{]//错误
可以间接继承:
如:public a extends b{}
public b extends c{}
c是a的先祖,a可以拥有c中定义的成员属性和方法;
Object <----Creature<-----Animal,Vegetation<-------Dog,Cat,Tiger
|
|
Genrenralization-->泛化
| |
【ER图】
方法重载:
在类中,方法的重载可以有多种方法,取决于参数
定义:在一个类中的方法有两个方法的方法名相同,但参数不同,我们说,一个方法是另一个方法的重载方法。
约束条件:
方法名相同;
方法的参数类型,个数,顺序至少有一项不同;(这三者通常统称方法签名)
方法的返回类型可以不同;
方法的修饰符可以不同;
方法覆盖(Override):
定义;如果在子类定义的一个方法:他的名称,返回类型,参数签名与其父类中定义的一个方法的名称,返回类型,参数签名匹配,我们就称之为子类方法覆盖父类方法;
约束条件:
1.子类方法的名称,返回类型,参数签名一致,否则会报编译错误;
2.子类方法不能缩小父类方法访问的权限,否者编译错误;
3.子类方法不能抛出比父类方法范围更大,更多的异常,子类方法抛出的异常只能和父类方法抛出的相同,或是其父类异常的子类;
4.方法覆盖是存在于子类和父类之间的;
5.父类的静态方法不能被子类的非静态方法覆盖;父类的非静态方法不能被子类的静态方法覆盖;
6.子类可以定义与父类静态方法相同的静态方法,【(编译通过),但是这不叫方法覆盖,叫做子类隐藏父类静态方法 ;
如 :public class Animal {
public void trian(){
//System.out.println();
}
}
public class Dog extends Animal{
@Override能够覆盖的标志
public void trian(){
System.out.println("小狗");
}
}
public class Cat extends Animal{
【@Override//能够覆盖的标志】
public void trian()
{
System.out.println("小猫");
}
}
public class Test {
public static void main(String []args){
Animal animal=new Cat();//多态
animal.trian();//小猫
// Animal animal=new Dog();
// animal.trian();//小狗
}
}
【@SuppressWarnings("unused")//禁止显示警告】
7.父类的抽象方法可以被子类的两种情况覆盖:1.子类实现了父类的抽象方法;2.子类覆盖父类的方法,也声明为抽象;
8.父类中的非抽象方法可以被子类的抽象方法覆盖;
浙公网安备 33010602011771号