继承 super 组合 Java继承和C++的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

java的继承是三个主要特性之一,这里的做一个笔记吧,因为和C++的继承有一点区别,所以整理出来,为以后学习起来方便,写的不对的地方希望大佬们指出。

一、继承基本概念(is-a)

目的就是为了代码重用,或者类的重用,这里和C++中不一样的叫法,就是也可以把父类称之为超类,关键字是=>extends(扩展的意思)

二、代码样例

注意:和C++不同的是,Java中的继承只能是单继承,就是说,子类只能有一个父类,单父类可以有多个子类。
父类people

public class people {
    
    
    public int age;
    public String name;
}

子类student,里面多了一个学校

public class student extends people{
    
    
    public String school;
}

主方法

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

    }
}

在这里插入图片描述
可以看到,创建一个子类实例,也可以访问到父类,因为我属性全都是public,若是private父类是看不到的。

1.super 与构造方法

每个类都有构造方法,如果不显式的创建构造方法,那么编译器就会给这个类自动生成一个没有参数的构造方法。

当父类里面有构造方法的时候,并且这个构造方法带有参数的时候,编译器就不再自动生成无参构造方法了,此时再创建子类实例,就需要显示的调用父类的构造方法(super),并且进行传参,否则创建不出来父类的实例,就会编译出错。

注意:当创建一个子类实例的时候,会先构造父类实例

public class student extends people{
    
    
    public String school;

    public student(int age, String name, String school) {
    
    
        super(age, name);
        this.school = school;
    }
}

2.特殊的知识点

当子类和父类有相同的属性时,通过super关键字,来取父类的属性;

public class student extends people{
    
    
    public String school;
    public int age=10;
    public void func(){
    
    
        System.out.println(age);
        System.out.println(super.age);
    }
 }

若继承太过于复杂,维护成本也会很大,为了让一个类不被继承,就可以使用final关键字;

final class people {
    
    
    public int age=100;
    public String name;
 }

这时,student类就不能继承了

三、组合(has-a)

组合也是为了代码重用,也是面向对象的一个重要属性。可以理解为一个类里面有好多其他的类

public class Homehvae {
    
    
    public Cat cat=new Cat();
    public Dog dog=new Dog();
    public student stu=new student();
}

家里有猫有狗还有一个学生。

猜你喜欢

转载自blog.csdn.net/weixin_45070922/article/details/112899152
今日推荐