【JAVA编】继承

本文详细介绍了Java中的继承概念,包括如何通过`extends`关键字创建子类,以及子类如何访问父类的成员变量和方法。在子类中,同名成员变量和方法的访问规则被阐述,指出在访问时会优先使用子类的成员。同时,文章提到了`super`关键字的使用,用于在子类中显式调用父类的成员。最后,总结了继承的要点,并提醒注意`super`关键字的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

继承是面向对象语法的三大特征之一。继承可以降低代码编写的冗余度,提高编程的效率。通过继承,子类获得了父类的成员变量和方法。一个子类如何继承父类的字段和方法,如何修改从父类继承过来的子类的方法呢。

  •  什么是继承 

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。比如:简单举个例子


//父类
class A{
    //父类的成员变量
    public int a1=10;
    public int a2=20;

    //父类的成员方法
    public void show(){
        System.out.println("父类的成员方法");
    }
}
//子类继承父类
class B extends A{
    //子类的成员变量
    public int a3=30;
    public int a4=40;

    //子类的成员方法
    public void func(){
        System.out.println("子类的成员方法");
    }

}
public class test {
    public static void main(String[] args) {
        B b= new B();
        System.out.println("a1="+b.a1);
        System.out.println("a2="+b.a2);
        //a3,a4,show都是B继承A下来的
        System.out.println("a3="+b.a3);
        System.out.println("a4="+b.a4);
        b.show();
    }
}

我从这代码可以看出子类B把父类A的成员变量和成员方法继承了下来,这就是继承

  • 继承的语法

在java里如果要表示类之间的继承,需要借助extends关键字,格式如下:

修饰符  class 子类 extends 父类{

  //..........................

}

  • 不同名和同名的情况

再举个例子还是上面那个代码改一下:


//父类
class A{
    //父类的成员变量
    public int a1=10;
    public int a2=20;

    //父类的成员方法
    public void show(){
        System.out.println("父类的成员方法");
    }
}
//子类继承父类
class B extends A{
    //子类的成员变量
    public int a2=30;
    public int a4=40;

    //子类的成员方法
    public void show(int i){
        System.out.println("子类的成员方法");
        System.out.println(i);
    }
     public void func(){
        System.out.println("子类的成员方法");
    }

}
public class test {
    public static void main(String[] args) {
        B b= new B();
        //a1调用是父类的成员变量
        System.out.println("a1="+b.a1);
        //a2调用是自己的成员变量
        System.out.println("a2="+b.a2);
        //a4调用是自己的成员变量
        System.out.println("a4="+b.a4);
        //调用是父类的成员方法
        b.show();
        //调用是子类的成员方法
        b.func();
        b.show(10);
    }
}

 总结

在子类通过访问成员变量时:

 1. 如果访问的成员变量子类中有,优先访问自己的成员变量

 2. 如果访问的成员变量子类中无,则访问子类继承父类的成员变量,如果父类也无定义,则编缉报错

 3 如果访问的成员变量同名,则优先访问自己的

在子类通过访问成员方法时:

1. 如果访问的成员方法子类中有,优先访问自己的成员方法

2 .如果访问的成员方法子类中无,则访问子类继承父类的成员方法,如果父类也无定义,则编缉报错

3. 如果访问的成员方法同名时,父类和子类同名方法的参数列表不同(重载),根据调用方法传递的参数选择合适的方法访问,如果没有则报错

  • super关键字

那问题来了如果在子类和父类同名的情况下,那如何访问父类相同的成员呢?

从上面代码可以看出直接访问是做不过到的,所以java里提供了super关键字,该关键字的作用就是在子类方法访问父类的成员的,也很简单.比如:

class A{
    public int a=10;
    public int b=20;
}
class B extends A{
    public int a=10;
    public int b=20;

    public void show(){
        //对于同名直接访问都是子类的
        a=100;//等价this.a
        System.out.println(a);
        b=200; //等价this.b
        System.out.println(b);

        //同名情况访问父类要借助super关键字
        System.out.println(super.a);
        System.out.println(super.b);
    }
}

public class test {
    public static void main(String[] args) {
        B b= new B();
        b.show();
    }

所以在子类方法中,要想访问父类的成员时,就要借助super关键字可以了

而访问同名的方法(重载),通过调用方法传递的参数选择合适的方法访问就行

注意事项

1. 只能在非静态的方法中使用

2. 要子类方法中,访问父类的成员变量和方法

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值