Java:继承

格式:public class 子类名 extends父类名();

public class zi extends fu();

父类:也被称为基类、超类;

子类:也被称为派生类;

public class Zi extends fu {
    public void show(){
        System.out.println("好好学习");
    }
}
class fu{
    public void mention(){
        System.out.println("天天向上");
    }
}
class Test{
    public static void main(String[] args) {
        fu f=new fu();
        f.mention();
//        天天向上
        Zi z=new Zi();
        z.show();
        z.mention();
//        好好学习
//        天天向上
    }
}

继承的好处与弊端:

好处:

1、提高了代码的复用性(多个类相同的成员可以放到同一个类中)

2、提高了代码的维护性(如果代码需要修改,只改一处就可以)

弊端:

1.继承让类与类之间发生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了类的独立性;

什么时候使用继承:

比如说苹果和香蕉,是属于同级关系,这个时候不需要使用继承,水果和苹果就属于上下级的关系,此时就可以使用继承;

继承中变量访问的特点:

在子类方法中访问一个变量:

子类局部范围内找;

子类成员范围内找;

父类成员范围内找;

如果都没有就报错;

public class Zi extends fu {
    public int weight = 75;
    public int age = 18;
    public void show() {
        System.out.println(age + "," + weight);
    }
}

class fu {
    public int age = 20;
    public void mention() {
        System.out.println(age);
    }
}
class Test{
    public static void main(String[] args) {
        Zi z=new Zi();
        z.show();
//        18,75
        z.mention();
//        20
    }
}

当子类成员变量名字与父类成员变量名字不一样的时候,使用什么变量名就访问谁:

public class Extends1 {
    public static void main(String[] args) {
        Son son = new Son();
       son.show();
    }
}
class Father{
    int num1=11;
    int num2=21;
    public void show(){
        int num1=11;
        int num2=21;
    }
}
class Son extends Father {
    int num1 = 30;
    int num3 = 40;
    public void show() {
        System.out.println(num1);
//        30
        System.out.println(num2);
//        21
        System.out.println(num3);
//        40
    }
}

super关键字:

super与this关键字的区别

this代表的是调用该类当前的对象

super代表的是父类存储空间的标识;

访问成员变量:

this访问的是本类中的成员变量,

super访问的是父类中的成员变量

访问的构造方法;

this(.....);

super(......);

访问成员方法:

this.成员方法();

super.成员方法();

public class Extends2 {
    public static void main(String[] args) {
        Son1 son=new Son1();
        son.show();
    }
}
class Father1{
    int num1=10;
    public void show2(){
        System.out.println("这是父亲中show2的方法");

    }
}
class Son1 extends Father1{
    int num1=20;
    public void show(){
        int num1=30;
        System.out.println(num1);
//        30
        System.out.println(this.num1);
//        20
        System.out.println(super.num1);
//        10
        show2();
//        这是父亲中show2的方法
        super.show2();
//        这是父亲中show2的方法
        show1();
//        这是儿子中show1的方法
        this.show1();
//        这是儿子中show1的方法
    }
    public void show1(){
        System.out.println("这是儿子中show1的方法");
    }

}

继承与构造方法的关系:

1、想要初始化子类,必须先初始化父类

原因:因为子类会继承父类的所有数据,甚至可能会使用父类的数据,所以在子类初始化之前一定要先初始化父类;

每个子类的第一个构造方法都会默认super();

public class Extends3 {
    public static void main(String[] args) {
        Son3 son3=new Son3("小飞");
//        父类中的无参构造方法
//子类中带参构造方法
    }
}
class Father3{
    int age;
    Father3(){
        System.out.println("父类中的无参构造方法");
    }
    Father3(String s){
        System.out.println("父类中的带参构造方法");
    }
}
class Son3 extends Father3{
    Son3(){
        System.out.println("子类中的无参构造方法");
    }
    Son3(String s){
        System.out.println("子类中带参构造方法");
    }
}

当父类中没有带参的构造方法时:

使用super关键字带参的形式访问父类中的带参构造方法;

使用this关键字调用本类中其他的构造带参方法;

注意:本类中其它地构造方法也必须可以访问父类中的构造方法,使用this关键字间接调用父类的构造方法,无论在哪里调用父类中的方法。只要保证子类构造方法执行之前,完成父类的初始化即可。

super(..)和this(...)必须出现在第一条语句,否则的话会出现父类中的数据多次初始化;

public class Extends4 {
    public static void main(String[] args) {
        Son4 son4=new Son4("你好");
//这是父类带参数的构造方法hallo
//子类的无参构造方法
//子类带参数的构造方法你好
    }
}
class Father4{
    int age;
    Father4(String s){
        System.out.println("这是父类带参数的构造方法" + s);
    }
}
class Son4 extends Father4{
    Son4(){
        super("hallo");
        System.out.println("子类的无参构造方法");
    }
    Son4(String s){
        this();

        System.out.println("子类带参数的构造方法" + s);
    }
}

继承与成员方法的关系:

1、当子类成员方法名与父类成员方法名不一样的时候,该调用谁的就调用谁的:

2、当子类成员方法名与父类成员方法名一样的时候,就近原则

1、先在本类中调用,如果有就调用,没有就去父类中调用;

2、如果父类中有方法就调用父亲的;

3、如果父类中也没有,就报错。

public class Extends5 {
    public static void main(String[] args) {
        Son5 son5=new Son5();
        son5.show2();
//        这里调用的是子类中show2方法
        son5.show1();
//       这里调用的是父类中的show1方法 
    }
}
class Father5{
    public void show1(){
        System.out.println("这里调用的是父类中的show1方法");
    }
}
class Son5 extends Father5{
    public void show2(){
        System.out.println("这里调用的是子类中show2方法");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值