Java se的语言特征之继承

2023-12-16 00:27:17

继承的定义

继承就是对共类进行抽取,放进一个特定的类里面

class Animal{
    public String name;
    public int age;
    public void eat(){
        System.out.println(this.name + "吃饭");
    }
}
class Dog extends Animal{
    public String name;
    public int age;
    public void eat(){
        System.out.println(this.name + "吃饭");
    }
    public void bark(){
        System.out.println(this.name + "汪汪叫");
    }
}
class Cat extends Animal{
    public String name;
    public int age;
    public void eat(){
        System.out.println(this.name + "吃饭");
    }
    public void miaomiao(){
        System.out.println(this.name + "喵喵叫");
    }
}

在上面的这个代码中,就是一个子类和父类之间的继承关系
其中Animal就是一个父类,也叫超类或者基类
其中的Cat以及Dog就是子类,也叫派生类
里面的extends就是一个继承符号,
所以的话,继承就是像代码中,猫猫和小狗,共有的东西,就放在一起,比如比如他们都有名字,都有年龄,都会吃饭所以放在一起一起,但是因为他们叫声不一样,所以不能给他们放在父类里面

注意:之前咋们学了private会限制我们的访问,但是这个不会限制继承,我们就可以继承后用get直接访问到

子类与父类的特殊情况

1>子类如何初始化父类和本身(成员变量名不相同时候)

public void method(){
     a = 1;
     b = 2;
}

就这样正常初始化就可以了

2>子类与父类变量名相同时,如何访问父类变量
super.成员变量
super.成员方法
super( )父类构造方法

3>子类继承父类以后,父类成员如何初始化
**注意:**子类在构造完成之前,一定要先帮助父类完成初始化

class Animal{
    public String name;
    public int age;
    public void eat(){
        System.out.println(this.name + "吃饭");
    }
    public Animal(String name , int age){
        this.name = name;
        this.age = age;
    }
}


class Dog extends Animal{
    public Dog(){
        super("小黄",8);
    }
    public void bark(){
        System.out.println(this.name + "汪汪叫");
    }
}

这上面就是一个完整的子类与父类的书写方法
其中在父类里面,有个this写的那个,那就是先帮父类完成的初始化
在子类里面,我们就直接通过super,来访问父类
里面super的作用,就是调用父类构造方法,帮助初始化子类从父类继承的成员,并不会生成父类对象

**注意:**记得我们在上一篇的封装里面,我们有说过,如果在父类默认无构造方法的时候,其中有一个不显示的不带参数的构造方法,子类也是一样的,也有一个空的构造方法

继承关系上:先父类后子类,但是有静态等多种输出时候,遵循先父类静态再子类静态,再父类再子类

this与super的区别

this,指代的是当前的对象
用法:
this.成员变量
this.成员方法
this( )调用构造方法

super指代的是当前对象的父类
用法:
super.成员变量
super.成员方法
super( )调用父类构造方法

**注意:**super不可以在静态方法中使用

两个不同的包的类怎么去继承

public class Test extends Test2{
     System.out.println(super.a);
}
public static void main(String[]args){
    Test test = new Test();
    test.func();
}

继承与组合

class Student{

}
class Teacher{

}
class School{
      public Student[ ] students;
      public Teacher[ ] teachers;
}

这一种的设计风格就是组合

继承中的注意点

1>继承的父类的访问修饰限定符一定是public的
2>一个类不可以去继承多个父类
3>一般的继承关系不超过三层
4>在访问修饰限定符前面可以加一个"final",可以让当前的类不可以被继承(被称其为密封类)
5>在一个变量前面加上"final",也可以让一个变量成为常量,只能初始化一次

文章来源:https://blog.csdn.net/weixin_52689187/article/details/134912862
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。