0
点赞
收藏
分享

微信扫一扫

面向对象的继承

仲秋花似锦 2022-04-23 阅读 41
java

继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

extends的意思是“扩展”。子类是父类的扩展。

JAVA中类只有单继承,没有多继承。(一个儿子只能有一个爸爸,一个爸爸可以有多个儿子)

继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。

继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。

子类和父类之间,从意义上讲应该具有“ is a"的关系。

子类与父类的体现:

package com.rgf.oop.Demo06;

public class Application {
    public static void main(String[] args) {
        Student stu1 = new Student();
        stu1.say();
        System.out.println(stu1.getMoney());
    }
}
package com.rgf.oop.Demo06;
//Person人类,父类
public class Person {
    //public  公共访问权限
    //private   私有访问权限
    //default  默认访问权限
    //protected 受保护的访问权限

        private   int money=1_0000_0000;
        public void say( ){
            System.out.println("说了一句话");
        }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}


package com.rgf.oop.Demo06;
//学生 is 人,派生类(子类)
//子类继承了父类,就会拥有父类的全部方法
public class Student extends Person{
    //除了继承之外,还可以采用组合的方法,将人组合到里面变成一个属性
    //Person person;采用组合的方法
    //ctrl+h,会体现出继承的关系
}
package com.rgf.oop.Demo06;
//Teacher is 人,派生类(子类)
public class Teacher extends Person {
}

运行界面如下:

通过其他方法体现出object类

按住ctrl,点击String,进入该页面

 

我们发现没有extends,我们点击ctrl+h,发现如下所示的关系。

 

super关键字的体现:

super里面访问成员变量和成员方法的详细代码:

package com.rgf.oop.Demo07;

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test("love");
        student.print();
    }
}
package com.rgf.oop.Demo07;
//学生  is 人:派生类,子类
//子类继承了父类,就会拥有父类的全部方法。
public class Student extends Person {
    private String name = "ypl";

   
    public void test(String name) {
        System.out.println(name);//love
        System.out.println(this.name);//ypl
        System.out.println(super.name);//rgf
    }

    public void print() {
        System.out.println("Student");
    }

    public void test1() {
        print();//Student
        this.print();//Student
        super.print();//Person
    }
}
package com.rgf.oop.Demo07;
//在java中,所有的类,都默认直接或者间接继承object.
//Person 人:父类
public class Person {
   //private String name="rgf";  私有的东西无法被继承
   protected String name="rgf";

   

   public void print(){
      System.out.println("Person");
   }



}

运行界面如下:

 super要调用父类的构造器时,必须要在子类构造器的第一行。

package com.rgf.oop.Demo07;
//学生  is 人:派生类,子类
//子类继承了父类,就会拥有父类的全部方法。
public class Student extends Person {
    private String name = "ypl";
//隐藏代码:调用了父类的无参构造
    public Student() {
        super();//调用父类的构造器,必须要在子类构造器的第一行
        System.out.println("Student无参执行了");
    }

}
package com.rgf.oop.Demo07;
//在java中,所有的类,都默认直接或者间接继承object.
//Person 人:父类
public class Person {
   //private String name="rgf";  私有的东西无法被继承
   protected String name="rgf";

   public Person() {
      System.out.println("Person无参执行了");
   }

}
package com.rgf.oop.Demo07;

public class Application {
    public static void main(String[] args) {
        Student student = new Student();

    }
}

运行界面如下:

super注意点:

1.super调用父类的构造方法,必须在构造方法的第一行。

2.super必须只能出现在子类的方法或者构造方法中

3.super和this不能同时调用构造方法。

super和this的不同点:

代表的对象不同:

this:本身调用者这个对象

super:代表父类对象的引用

前提:

this:没有继承也可以使用

super:只能在继承条件下才可以使用

构造方法不同:

this:本类的构造

super:父类的构造

举报

相关推荐

0 条评论