java面向对象--多态
程序员文章站
2022-05-25 20:42:03
...
多态:
1. 概念
多态是同一个行为具有多个不同表现形式或形态的能力。
举例: Cat c=new Cat();
Animal a=new Cat();
猫可以是猫的类型。猫 m = new 猫();
同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();
public class MyTest {
public static void main(String[] args) {
Animal an = new Dog();
an.eat();
an=new Cat();
an.eat();
}
}
class Animal{
public void eat(){
System.out.println("吃饭");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("吃小鱼干");
}
}
class Dog extends Animal{
public void eat() {
System.out.println("狗吃骨头");
}
}
2.多态的前提
- 多态的前提:要有继承,如果没有继承,那多态也无从谈起
- 多态要有方法重写,当然不重写,语法上来说,不报错,但是多态的存在就没有意义
- 父类引用指向子类对象:父 f = new 子();
3.多态成员访问特点
a:成员变量
编译看左边,运行看左边。
b:构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:成员方法
编译看左边,运行看右边。
d:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)
public class MyTest {
public static void main(String[] args) {
// Zi zi = new Zi();
// System.out.println(zi.num);
// zi.fuShow();
//多态的形式访问成员变量的特点
//多态的形式访问成员变量:编译看左边,运行看左边
Fu fu = new Zi();
System.out.println(fu.num);
//多态的形式访问成员方法的特点:编译看左边,运行看右边 (子类重写了父类的方法)
fu.fuShow();
//静态方法:不参与重写
fu.fuShow2();
Fu.fuShow2();
Zi.fuShow2();
}
}
class Fu {
int num = 100;
public void fuShow() {
System.out.println("fu show");
}
public static void fuShow2() {
System.out.println("fu 静态 show");
}
}
class Zi extends Fu {
int num = 200;
public void fuShow() {
System.out.println("zi show");
}
public static void fuShow2() {
System.out.println("zi 静态 show");
}
}
4.多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)
5.多态的弊端和改进
弊端:不能使用子类特有的功能
解决方法:把父类的引用强制转换为子类的引用。(向下转型)
public class MyTest {
public static void main(String[] args) {
Student student1 = (Student) person;//向下转型
student1.playGame();
}
}
class Person {
public void eat() {
System.out.println("吃饭");
}
}
class Student extends Person {
public void eat() {
System.out.println("学生爱吃米饭");
}
public void playGame() {
System.out.println("学生爱玩游戏");
}
}
今天的学习到这里就结束啦~
I figure life’s a gift,and i don’t intend on wasting it.
我觉得人生是礼物,我不想白白浪费
—《泰坦尼克号》
上一篇: Python中的面向对象编程
下一篇: JavaScript中的面向对象编程
推荐阅读
-
PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】
-
JavaScript使用面向对象实现的拖拽功能详解
-
java面向对象基础_final详细介绍
-
java 面向对象的理解(简述java面向对象的三个基本特征)
-
Java String创建对象实例解析
-
Java基于Scanner对象的简单输入计算功能示例
-
EL表达式的隐式对象_动力节点Java学院整理
-
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
-
Python类的继承、多态及获取对象信息操作详解
-
JavaScript函数、闭包、原型、面向对象学习笔记