继承 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();
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值