/*
* 类的继承和super关键字
*
* 软件开发的三大目的:
* 可拓展性;
* 可维护性;
* 可重用性;
*
* 这里单说下可重用性这一项:
* 为了代码复用,复用方式有:
* 函数的调用复用;
* 类的实例化复用,类直接的复用;
* 类的继承复用;
* 前两个我都有发过,这里就说一下类的继承,以及继承中用的较多的关键字:super;
*
*
* 首先要先了解什么是继承?
* 继承,用人认知的角度说的话就好比一个父亲的东西由他的几个儿子来继承,也就是有了父亲的东西,同时也有自己的东西----从网上也看到过一句话形容继承:长江后浪推前浪,子类都比父类强;
* 也就是说,发生继承关系的时候,父类的东西,子类都有,但子类的东西父类不一定有;
*
* 那从代码的角度来说:
* 当一个类被另外一个类继承的时候,这个类就是父类,另一个类就是子类,子类拥有了父类里面的方法和属性,同时子类也有自己的方法和属性;
* 继承的语法:
* public class A extends B{
}
*
* 即:A继承于B,现在A里有了B的方法和属性;
*
* 继承里需要注意的是: 类和类之间只能单继承,一个类如果没有显示继承了其他类,则该类默认继承Object.java.lang.Object;
* Object是所有类的祖类,可以看作是任何没有继承关系的类的父类;
*
* 我们代码中看:
*/ public class JavaSE{
public static void main(String[] args){
Animal a = new Animal();//实例化父类对象;
a.eat(); Cat c = new Cat();//实例化子类对象;
c.eat(); Animal m = new Mouse();//父类引用指向子类对象,这是多态,先别太深究这个;
m.eat();
}
} class Animal{
public void eat(){
int i = ;
System.out.println( "动物吃东西" );
}
} class Cat extends Animal{//这里我是没有写任何方法的,但是实例化之后,却能调用父类的eat()方法,证明Animl(父类)的成员方法被Cat(子类)继承了; } class Mouse extends Animal{//这里是子类对父类方法的覆写,所以调用子类就用子类的方法,调用谁就输出谁(指子类和父类);
public void eat(){
super.eat();//super关键字,特指父类,这里是调用父类里面的eat()方法,所以输出父类里的东西;
//这里说一下super关键字:
//super关键字用官方的解释是: super保存了父类型的特征;
//有一种错误的但是很好理解的说法是,super代表了对父类的引用,这种说法是不正确的,super并不会创建父类对象,但是可以先这么记;
//父类型的特征就包括了方法属性等等,在子类里面可以用'super.方法名()'调用父类里面的方法和属性;
//需要值得注意的是,有一个和super在作用上比较相似的关键字this,在构造方法中,this和super都只能放在构造方法的第一行,而且两者是不能共存的,即有this就没有super,反之一样;
//同时,当构造方法中既没有this,也没有super时,系统会默认一个super;
System.out.println( "老鼠吃大米" );
}
}
/*
* 继承关系中方法的覆写
*
* 覆写:
* 就是在子类继承父类成员方法之后,重新写了一个同名的方法,但方法的属性改变了,外部类调用子类方法时,会调用子类的属性而不是父类的属性,即覆盖并重写了从父类继承过来的方法;
*/ public class JavaSE{
public static void main(String[] args){
Animal a = new Animal();//实例化父类
a.eat();//调用: 对象名.方法名;
Animal c = new Cat();//多态,父类引用指向子类对象
c.eat();
Mouse m = new Mouse();//实例化子类
m.eat();
}
} class Animal{
public void eat(){
System.out.println( "动物在吃东西" );
}
} class Cat extends Animal{
public void eat(){//方法的覆写:和父类的方法名相同,但是属性不同,相当于覆盖了原有的继承过来的父类方法,自己重写了一下;
//调用的结果应该显示子类重写后的属性;
System.out.println( "猫在吃鱼" );
}
} class Mouse extends Animal{
public void eat(){//方法的覆写;
System.out.println( "老鼠在吃大米" );
}
}