Java基础语法(3)

一、继承

1、定义

面向对象(OOP)三大特性:封装、继承、多态
类的继承就是在原有类的基础上创建新类,实现代码复用

“张三继承了他爹1美元的资产”,一般说到继承,默认是亲缘关系(父子、爷孙等)。如果将张三他爹作为一个类,这个类就叫父类;相应的,张三作为子类
在Java中Object是所有类的根,叫做基类(超类)
在这里插入图片描述

2、Dad和Son案例

Dad类目前有三个成员变量,财产,车子,是否抽烟。Son类想继承Dad类的前两个属性,因为Son不抽烟

① Dad类在这里插入图片描述
② 子类采用extends关键字,可以引用父类中的属性和方法
在这里插入图片描述
③ 创建Test测试类,分别创建Dad和Son类的对象,并输出其属性
在这里插入图片描述
由于继承了Dad类,所以抽烟的习惯也继承了,但子类并不抽烟,所以这里需要在Son类中进行声明、覆盖
④ Son类不抽烟声明
在这里插入图片描述
⑤ Test测试类运行结果
在这里插入图片描述

这里我们是主动的对继承内容进行修改,但也存在被动的情况
也就是子类无法继承父类的构造方法

3、super 和 final 关键字

父类采用了带参数的构造方法,子类应该如何调用?

① super.父类成员变量/父类成员方法
和之前的this关键字类似,this指向的是本类对象,而super指向的是父类对象

父类属性:私房钱
父类方法:rushB()

在这里插入图片描述

stealMoney( )方法中调用了父类成员变量
play( )方法中调用了父类方法

在这里插入图片描述

运行结果

在这里插入图片描述

② final 关键字

和C语言中const,表示常量。可以修饰类、成员变量和成员方法。

1、修饰类表示最终类

通过extends可以实现类的继承,实际情况可能不希望某类发生变动,不希望它拥有任何子类,因此使用final关键字。此类无法作为父类派生出其他的子类,这样的类成为最终类

2、修饰变量表示常量

例如:

 	final PI = 3.14159

3、修饰方法表示最终方法

被修饰的方法不能被覆盖,被称为最终方法,子类可以继承但是不允许重写的方法

二、多态

1、定义

多态是面对对象程序的第三大特征
多态是指在继承的关系下,对于相同的信息,不同的类采用不同的实现方法,即不同类的对象调用同名的办法,产生不同的行为

从字面上理解,“相同的表达式(命令),不同的操作”

2、方法重载

一个类定义了多个方法,名字相同,但是所含的参数类型和数量不同

不仅成员方法可以重载,构造方法也可以重载
在这里插入图片描述

3、方法覆盖

子类中拥有和父类相同方法名,相同参数类型和个数,但方法体(内容)不同

Animal父类:

public class Animal {
    void say(){
        System.out.println("我是一只动物");
    }
}

Cat子类:

public class Cat extends Animal{
    @Override
    void say() {
        System.out.println("我是一只小猫咪");
    }
}

AnimalDemo测试类:

public class AnimalDemo {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.say();
    }
}

运行结果(Cat类中的say方法覆盖掉了Animal父类中的say方法):

在这里插入图片描述

4、多态概念的引入

案例来自于韩顺平老师
1、主人给动物喂食物,初始情况如下图
在这里插入图片描述

Animal动物类

在这里插入图片描述

Cat和Dog类(Animal的子类)
在这里插入图片描述
在这里插入图片描述

Food类(和Animal一样)

public class Food {
    private String name;
    public Food(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Fish和Bone类(Food的子类)

public class Fish extends Food{
    public Fish(String name) {
        super(name);
    }
}
public class Bone extends Food{
    public Bone(String name) {
        super(name);
    }
}

2、Master主人类
在这里插入图片描述

问题是主人类中的喂养方法,这么写过于繁冗,如果再养几只动物,食物的种类也不同。类增加是必然的,但是feed()方法重复度过高。在这里我们采用多态的解决办法

由于Cat、Dog继承于Animal,Fish、Bone继承于Food。因此我们在创建对象时,进行修改

AnimalDemo(测试类)创建对象时:
在这里插入图片描述
Master(主人类)feed()方法进行修改:
在这里插入图片描述
并未报错且程序正常运行,具体内容我们下次讲解ヾ(●´∀`●)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值