面向对象三大特征之继承

时间:2021-05-30 19:52:04

一、继承

使用要点:

1.父类也称作超类、基类、派生类等。

2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。(类只有单继承,接口有多继承)

3.Java中类没有多继承,接口有多继承。

4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。

5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

package cn.s;

public class TestExtends {
    public static void main(String[]args) {
        Student stu=new Student();
        stu.name="sun";
        stu.old=18;
        stu.rest();
        Student stu2=new Student("@sun",18,"play");
        System.out.println("我的名字是:"+stu2.name);
        System.out.println(stu2 instanceof Student);   //用于判断该对象是否属于该类。
        System.out.println(stu2 instanceof Person);
        System.out.println(stu2 instanceof Object);
    }

}
class Person
{
    String name;
    int old;
    public void rest() {
        System.out.println("休息一会!");
    }
}
class Student extends Person{
    String major;
    
    public void study() {
        System.out.println("学习两小时");
    }
    public Student(String name,int old,String major) {//构造方法
        this.name=name;
        this.old=old;
        this.major=major;
    }
    public Student() {
        
    }
    
}

 

方法的重写  override

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

1.“==” :方法名、形参列表相同。

2.“<=” :返回值类型和声明异常类型,子类小于等于父类。

3.“>=” :访问权限,子类大于等于父类。

package cn.s;

public class TestOverride {
    public static void main(String[]args) {
        Horse h= new Horse();
        h.run();
    }

}

class Vehicle{
    public void run() {
        System.out.println("快点跑");
    }
    public void stop() {
        System.out.println("停下来");
    }
    public Person  who() {
        return new Person();                    //Person 类
        
    }
}
    


class Horse extends Vehicle{                    //继承父类
    public void run() {                            //对父类方法的重写;
        System.out.println("已经够快了");
    }
    public Student who() {                        //student类
        return new Student();                   //返回值类型子类小于等于父类
    }
}

 

Object 类是所有java 类的根基类,也就意味着所有的java 对象都拥有Object类的属性和方法。

package cn.s;

public class TestObject {
    public static void main(String args[]) {
        TestObject to =new TestObject();
        System.out.println(to.toString());
        
        ACP p=new ACP("sun",18);                    //对象
        System.out.println(p.toString());

    }
    
    public String toString() {
        return "测试object";
    }
}
class ACP{
    String name;
    int age;
    public String toString() {                        //在ACP中重写toString方法
        return "姓名:"+name+",年龄:"+age;
    }
    
    public ACP(String name,int age) {
        this.name=name;
        this.age=age;
    }
    
}

 super父类对象引用——继承树追溯问题

面向对象三大特征之继承