Java——继承2

一、instanceof运算符

instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回true;否则返回false。

使用instanceof运算符进行类型判断的实例代码

public class IIIIIInstanceof {
    public static void main(String[]args){
        Student s=new Student ("Clerck",165,"java");
        System.out.println(s instanceof Person);
        System.out.println(instanceof Student);
    }
}

两条语句的结果都true

二、继承使用要点

  1. 父类也称作超类,基类。子类又作派生类等。
  2. Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得系统链过于复杂,系统难于维护。
  3. Java中类没有多继承,但接口有多继承;
  4. 子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类私有的属性和方法);
  5. 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object

三、方法的重写override

子类通过重写父类的方法,可以用自身的行为替换父类的行为,方法的重写是实现多态的必要条件。

方法的重写需要符合下面三个要点:

  1. 两个相等:方法名、形参列表相同;
  2. 小于等于:返回值类型声明异常类型,子类小于等于父类;
  3. 大于等于:访问权限,子类大于等于父类。

方法重写的实例代码

public class IIIIIInstanceof {
    public static void main(String[]args){
       Vehicle v1=new Vehicle();
       Vehicle v2=new Horse();
       Vehicle v3=new Plane();
       v1.run();
       v2.run();
       v3.run();
       v2.stop();
       v3.stop();


    }
}
class Vehicle{
    public void run(){
        System.out.println("跑……");
    }
    public void stop(){
        System.out.println("停止不动");
    }
}
class Horse extends Vehicle{//马也是交通工具
    public void run(){//重写父类方法
        System.out.println("四蹄翻飞,哒哒哒……");
    }
}
class Plane extends Vehicle {
    public void run() {//重写父类方法
        System.out.println("天上飞!");
    }
    public void stop(){
        System.out.println("空中不能停,坠毁了!");
    }

}
/**
 * 跑……
 * 四蹄翻飞,哒哒哒……
 * 天上飞!
 * 停止不动
 * 空中不能停,坠毁了*/

四、final关键字

final关键字的作用:

  • 修饰变量:被它修饰的变量不可改变,一旦被赋了初值就不能被重新赋值

final int MAX_SPEED=120

  • 修饰方法:该方法不可被子类重写。但可以被重载!

final void study(){}

  • 修饰类:修饰的类不能被继承。比如Math、String等

final class A{}

五、继承和组合

我们可以通过继承方便的复用已经定义类的代码,而还有一种方式也可以让我们方便的实现“代”码复用,那就是“组合”。

“组合”不同于继承,他更加的灵活。

“组合”的核心就是“将父类对象作为子类的属性”,然后“子类通过调用这个属性来获得父类的属性和方法”。

public class Point {
    public static void main(String[]args){
        Student s=new student("Anny",188,"java");
        s.perosn.rest();//s.rest()
        s.study();
    }
}
class Person {
    String name;
    int height;

    public void rest() {
        System.out.println("休息一会儿!");
    }
}
    class Student /*extends Person*/{
    Person person=new person();
    String major;
     public Student(String name,int height,String major){

        this.person.name=name;//this.name=name;
        this.person.height=height;//this.height=height
        this.person.rest();
        this.major=major;
    }
    

    public void study(){
       System.out.println("要好好学习哦");
        }
}

组合比较灵活,继承只能有一个父类,但是组合可以有多个属性。所以有人建议“组合优于继承,开发中可以不用继承”。但笔者在这里不建大家走极端。

继承除了代码复用、也能方便我们对事物建模。所以对于“is-a”关系建议使用继承,“has-a”关系建议使用组合。

留在最后

  1. 面向对象的三大特征是什么?
  2. 继承的两个主要作用是什么?
  3. JAVA中实现继承是哪个关键字?
  4. JAVA中的类继承是单继承还是多继承?JAVA中有其它地方有多继承吗?
  5. 子类继承父类可以获得除父类构造方法之外的所有,但不见得都能使用,请用现实生活中的实例打比喻来描述这个现象。
  6. 定义类时,没有使用extends,那它的父类是什么?
  7. 组合和继承的关系如何理解?
  8. 方法的重写和方法的重载有什么区别?
  9. final关键字修饰变量、方法、类,都分别表示什么含义?

你可能感兴趣的:(java,开发语言)