java基础--继承、super、this、抽象类(IDEA版)

第一章:继承

1.概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。
多个类可以称为子类,而单独的哪一个类被称为父类,超类,或者是基类。
2.定义
就是子类继承父类的方法和属性,使得子类与父类共有方法和属性,可以访问父类非私有化的属性和方法。
3.好处
提高了代码的复用性
类与类之间产生了关系,是多态的前提

在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。
例如父类是员工,子类是讲师,那么“讲师就是一个员工”。关系:is-a。

定义父类的格式:(一个普通的类定义)
public class 父类名称 {
   
    // ...
}

定义子类的格式:
public class 子类名称 extends 父类名称 {
   
    // ...
}

在这里插入图片描述
注意:在父子类关系中,如果成员变量名字重名之后,则创建子类对象的时候,访问有两种方式,
1.直接通过子类对象访问成员变量
等号的左边是谁,就优先用谁,没有则向上找
2.间接通过成员方法访问成员变量
该方法属于谁,就优先使用谁,没有则向上找

父类

public class Fu {
   

    int numFu = 10;

    int num = 100;

    public void methodFu() {
   
        // 使用的是本类当中的,不会向下找子类的
        System.out.println(num);
    }

}

子类

public class Zi extends Fu {
   

    int numZi = 20;

    int num = 200;

    public void methodZi() {
   
        // 因为本类当中有num,所以这里用的是本类的num
        System.out.println(num);
    }

}

测试方法:

public class Demo01ExtendsField {
   

    public static void main(String[] args) {
   
        Fu fu = new Fu(); // 创建父类对象
        System.out.println(fu.numFu); // 只能使用父类的东西,没有任何子类内容
        System.out.println("===========");

        Zi zi = new Zi();

        System.out.println(zi.numFu); // 10
        System.out.println(zi.numZi); // 20
        System.out.println("===========");

        // 等号左边是谁,就优先用谁
        System.out.println(zi.num); // 优先子类,200
//        System.out.println(zi.abc); // 到处都没有,编译报错!
        System.out.println("===========");

        // 这个方法是子类的,优先用子类的,没有再向上找
        zi.methodZi(); // 200
        // 这个方法是在父类当中定义的,
        zi.methodFu(); // 100
    }

}

注意:
父类不能调用子类的东西
但是子类可以调用父类的
成员方法重名–重写
如果子类父类中出现重名的成员方法,这时的访问是一种特殊的情况,叫做方法重写
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

class Fu {
   
public void show() {
   
System.out.println("Fu show");
}
} c
lass Zi extends Fu {
   
//子类重写了父类的show方法
public void show() {
   
System.out.println("Zi show");
}
}
public class ExtendsDemo05{
   
public static void main(String[] args) {
   
Zi z = new Zi();
// 子类中有show方法,只执行重写后的show方法
z.show(); // Zi show
}
}

重写和重载的关系
在父子类的继承关系当中,创建子类对象,访问成员方法的规则:
创建的对象是谁,就优先用谁,如果没有则向上找。

注意事项:
无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的。

重写(Override)
概念:在继承关系当中,方法的名称一样,参数列表也一样。

重写(Override):方法的名称一样,参数列表【也一样】。覆盖、覆写。
重载(Overload):方法的名称一样,参数列表【不一样】。

方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。

//父类
public class Fu {
   

    public void methodFu() {
   
        System.out.println("父类方法执行!");
    }

    public void method() {
   
        System.out.println("父类重名方法执行!");
    }

}
//子类
public class Zi extends Fu {
   

    public void methodZi() {
   
        System.out.println("子类方法执行!");
    }

    public void method() {
   
        System.out.println("
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值