Java继承初步讲解

1. 继承的直观理解

⭐️继承可以这样理解:

  • 首先将一些变量和方法打包在一个类中当作一个工具。
  • 其他类可以通关继承来获得这个工具的所有成员变量和属性。
    (其中当作工具的类被称为父类,而这里的“其他类”是子类)

现将先将属性 agename方法getAge()getName包装成一个父类(Animal)如下:
在这里插入图片描述

而现在就可以这样写Monkey和Fish两个类:
在这里插入图片描述
最终可以达到以下的效果:

在这里插入图片描述

2. 继承的实现——extends关键字

在Java中要实现类的继承关系需要用到extends关键字

🍑基本格式:

public class Son extends Father{
    
}

其中的Son类是子类,Father类是父类.
以上面的Fish类和Animal类的继承关系实现如下:

public class Animal {
	//父类
    private int age;
    int name;

    public int getAge() {
        return age;
    }

    public int getName() {
        return name;
    }
}

public class Fish extends Animal{
    //子类 
    private String gander;

    public String getGander() {
        return gander;
    }

}

Java继承只能继承一个父类,但看可以继承父类继承的父类变相的达到多继承的效果。

3. 访问父类成员

3.1 访问成员变量

子类可以访问继承自父类的成员变量和方法,下面展开介绍:

  • 访问父类非private修饰的成员变量
    子类是可以直接访问。如:super.name
  • 访问父类private修饰的成员变量
    子类可以使用从父类继承的对应get方法来访问。

🍌例子:

public class Dog extends Animal{

    public dog(int age, String name) {
        super(age, name);
    }
    {
        System.out.println(name);
        //访问父类非private修饰的变量
        System.out.println(this.getAge());
        //访问父类中杯private修饰的变量
    }
}

注:在Animal类(代码在第一个例子中)中name是default修饰的,age是private修饰的。

  • 当子类的成员变量和父类相同时优先访问子类的成员变量
public class Fish extends Animal{
    private String gander;

    String name="子类中的名字";

    public String getGander() {

        return gander;
    }

    public static void main(String[] args) {
        Fish f=new Fish();
        System.out.println(f.name);
    }
}

结果:
在这里插入图片描述

  • 调用父类的方法
    子类可以直接调用继承自父类方法。
  • 当子类重写父类的方法后会优先调用子类重写的方法

🍊例子:

public class Fish extends Animal{
    private String gander;

    String name="子类中的名字";

    
    public String getGander() {
        return gander;
    }
    @Override
    public String getName(){
        return "子类重写的方法";
    }

    public static void main(String[] args) {
        Fish f=new Fish();
        System.out.println(f.getName());
    }
}

结果展示:
在这里插入图片描述

  • 通过super关键字在子类重写父类方法后调用父类方法
public class Fish extends Animal{
    private String gander;

    String name="子类中的名字";
    {
        super.name="用super关键字修改后的名字";
        System.out.println(super.name);
    }

    public String getGander() {
        return gander;
    }
    @Override
    public String getName(){
        return "子类重写的方法";
    }

    public static void main(String[] args) {
        Fish f=new Fish();

    }

}

结果展示:
在这里插入图片描述

⭐️总结:
调用时会优先调用子类的方法和属性,如果在子类中没有找到则会从父类中进行查找,若父类也没有则会报错,当然也空一通过super关键字直接访问父类的成员。

4. 子类构造方法

子类的构造方法会调用父类的构造方法,借组super关键字可以访问父类的构造方法。
⭐️super要放到第一行。

  • 如果父类存在不含参数的构造方法时子类的构造方法第一行会默认有一行代码super()
public class Animal {
//父类
    private int age=0;
    String name="父类名字";
    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}
public class Fish extends Animal{
    private String gender;
    String name="子类中的名字";

    public String getGender() {
        return gender;
    }
    @Override
    public String getName(){
        return "子类重写的方法";
    }
    //构造方法
    public Fish(String gender){
    // super();
        this.gender=gender;
    }

    public static void main(String[] args) {
        Fish f=new Fish("雄");
        System.out.println(f.getGender());
    }

}

  • 父类的构造方法有参数
    子类的构造方法第一行需要加入super()方法,里面填上父类的构造方法需要的参数。
    例子
    Animal类构造方法:
 public Animal(int age,String name){
        this.age=age;
        this.name=name;
    }

Fish类构造方法:

 public Animal(int age,String name){
        this.age=age;
        this.name=name;
    }
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值