Java基础语法--继承和多态(2)

一、多态(一种思想)

1.1 定义:

一种操作作用于不同对象时,产生不用的行为或者结果。多态允许使用同一的接口处理不同的对象,从而提高代码的灵活和可扩展性。

1.2 使用条件:

1.必须在继承的体系下才能使用。
2.子类必须对父类方法进行重写。
3.通过服了的引用调用重写方法。

1.3向上转型:

定义:子类对象被当做父类来使用,即用父类来接受子类的对象。
在这里就用到了向上转型
上面代码中,我们有几个发现
1.我使用父类的类型来接受子类的对象,并且调用了子类的方法,其中用到了方法重写(上一章中讲到了,感兴趣可看),重写了run方法

向上转型的优势:

1.子类对象包含父类所有的属性和方法,不会丢失父类定义的行为。
2.通过父类引用调用放啊发是,实际上是执行的子类覆盖的方法。这个过程叫做动态绑定。
3.无需显示转换,可以直接赋值,例如:Animal animal = new Dog();
动态绑定就是通过父类引用调用父类和子类重写的方法的过程。

向上转型和直接创建子类有什么区别呢?

在这里总结了一张表给大家
在这里插入图片描述
那么继承和多态就到这里就结束了,下一期预告:抽象类和接口。
一整个期待住了,下期再见!!!

### Java 面向对象编程中的封装、继承多态 #### 封装的概念及应用 封装是一种信息隐藏技术,通过这种方式,对象的状态被保护起来不被外部直接访问。在Java中,可以通过设置类成员变量的访问权限来实现这一点。通常情况下,会将字段设为私有(private),并通过公有的(getter/setter)方法提供对外部访问这些字段的方式。 ```java class Person { private String name; public void setName(String newName){ this.name = newName; } public String getName(){ return this.name; } } ``` 这种做法不仅提高了数据的安全性一致性,还允许开发者控制如何以及何时修改内部状态[^1]。 #### 继承的概念及应用 继承是面向对象编程的一个核心特性之一,在Java里它使得一个新创建出来的子类能够自动获得另一个已存在的父类属性与行为(即方法). 这样做的好处是可以减少重复代码并促进软件组件之间的可重用性. 当定义一个新的类时,如果这个新的类完全或者部分实现了现有某个其他类的功能,则可以让该新类从那个旧类那里“继承”。这表示新类将会拥有原类的所有非私有成员函数及其数据成员,并且还可以添加额外的新特征或改变已有特性的具体实现方式: ```java // 定义基类 Animal class Animal{ protected String sound=""; public void makeSound() { System.out.println(sound); } } // 创建 Dog 类继承自 Animal 并覆写了 makeSound 方法 class Dog extends Animal{ @Override public void makeSound(){sound ="Woof!";super.makeSound();} } ``` 上述例子展示了`Dog`类是如何基于`Animal`的基础上构建而成的同时又保持了自己的独特之处——发出不同的声音. #### 多态的概念及应用 多态指的是同一个操作作用于不同类型的对象上会产生不同类型的行为的现象。对于Java而言,主要体现在两个方面: - **编译期多态 (静态/早期绑定)** : 由方法重载(Method Overloading)所支持. - **运行时期多态 (动态/晚期绑定)** :这是指当调用了某个已被子类重新定义过的超类版本的方法时,实际执行的是最具体的派生类所提供的那一份实现而不是声明处指定的那个类型的方法体; 实现此机制的关键在于使用虚表(Virtual Table). 下面的例子说明了后者的工作原理: ```java class Shape { // 声明了一个名为 draw 的抽象方法 public abstract void draw(); } class Circle extends Shape { @Override public void draw() { System.out.println("Drawing a circle..."); } } class Rectangle extends Shape { @Override public void draw() { System.out.println("Drawing a rectangle..."); } } public class Main { public static void main(String[] args) { Shape s1=new Circle(); Shape s2= new Rectangle(); s1.draw(); // 输出 "Drawing a circle..." s2.draw(); // 输出 "Drawing a rectangle..." } } ``` 在这个案例里面,尽管`s1` `s2` 变量都被声明为了`Shape` 类型,但在它们各自调用各自的`draw()` 函数的时候却展现出了不一样的效果 —— 即使是在相同的语法结构下也能表现出差异化的逻辑处理过程,这就是所谓的“多态”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值