人生苦短我学Java-9-面向对象三大特性之多态
一、多态
1、什么是多态?
- 多种形态
- 是指一个对象在不同时刻,表现出来不同的状态
- 比如说,水滴,液态、气态、固态。
2、多态的前提条件
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
口诀:
1.在多态,成员变量/静态方法/静态变量 编译、运行看左边。
2.在多态,方法重写编译看左边、运行看右边。
package com.ppl.day; /* com.ppl.day:学习项目 @user:广深-小龙 @date:2022/1/3 15:51 */ /* 口诀: 1.在多态,成员变量/静态方法/静态变量 编译、运行看左边。 2.在多态,方法重写编译看左边、运行看右边。 */ public class Day13 { public static void main(String[] args) { Fu1 f = new Zi1(); System.out.println(f.i); System.out.println(f.j); // Fu1 没有变量 j f.print(); f.printFu(); } } class Fu1 { int i = 1; int j = 3; public void printFu() { System.out.println("printFu"); } public void print() { System.out.println("Fu1"); } } class Zi1 extends Fu1 { int j = 2; public void print() { System.out.println("Zi1"); } }
输出:
1
3
Zi1
printFu
3、多态的优劣
优点:
- 提高代码扩展性
- 父类引用作为形式参数,子类对象作为实际参数
/* 多态的应用 1.提高代码扩展性 2.父类引用作为形式参数,子类对象作为实际参数 */ class Anima { public void eat() { } } class AnimalTool { // 继承结合多态的应用,一个工具类的方法即可 public static void print(Anima anima) { anima.eat(); } // 原每个子类调用时,都需要+一个工具类方法 // public static void print(Cat cat) { // cat.eat(); // } // public static void print(Dog dog) { // dog.eat(); // } } class Cat extends Anima { public void eat() { System.out.println("猫吃鱼..."); } } class Dog extends Anima { public void eat() { System.out.println("狗啃骨头..."); } }
缺点:
- 父类引用不能使用子类中的内容,解决:向下转型
package com.ppl.day; /* com.ppl.day:学习项目 @user:广深-小龙 @date:2022/1/3 16:46 */ public class Day14 { public static void main(String[] args) { PPerson p = new Student(); // 向上转型 p.eat(); // 吃 // p.play(); // 编译看左边,左边p没该方法,所以报错,需要向下转型 Student s = (Student) p; // 向下转型 s.play(); } } class PPerson { public void eat() { System.out.println("吃..."); } } class Student extends PPerson { public void eat() { System.out.println("学生吃面条..."); } public void play() { System.out.println("学生玩游戏..."); } }
注意:PPerson p = new Student(); // 向上转型
向下转型时必须是 Student x = (Student)p,不能是其它;否则运行时报错,编译不会报错。ClassCastException
多态:同一个对象在不同时刻表现不同的状态。可上下转型。如狗 --> 动物 --> 生物
欢迎来大家QQ交流群一起学习:482713805,博主微信+:gogsxl
推荐这些技术文章:
extends 继承
//银行卡
public class Account {
String acID;
String username;
String password;
double balance;
//存款的方法
public void deposit(double money){
System.out.println("...
面向对象编程(二)对象的转型:分 向上转型 和 向下转型(强制类型转换)向上转型:父类的引用指向子类的对象,但是不能使用子类多出来的方法。如: public class Test{ public static void main(String args[]){ Person p = new Person(); p.playWithAnimal(new Dog()); } } class Anim...
面向对象
面向对象编程(OOP,Object Oriented Programming),本质就是以类的方式组织代码,以对象的组织(封装)数据。
对象的创建分析
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及队形中构造器的调用。
类中构造器也称构造方法,实在进行创建对象的时候必须调用的,并且构造器有以下两个特点:
1.必须和类的...
封装:把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法。
继承:子类继承父类,可以继承父类的方法和属性,提高了代码的复用性。
多态:1.子类继承父类
2.子类重写父类方法
3.父类引用指向子类对象
...
一、继承 1、面向对象三大特性之继承。 较少代码的冗余,提高代码的复用性; 提供扩展性; 为多态提供了前提; 继承格式为:public class A extends B{} A:子类、派生类、subclass B:父类、超类、基类、superclass 体现: —旦子类A继承父类B以后,子类A中就获取了父类B中声明的结构:属性、方法。 父类中private私有属性或者私有方法,子类继...
Java面向对象编程02——面向对象的三大特征
目录Java面向对象编程02——面向对象的三大特征封装继承supersuper注意点VS this补充this重写多态实例演练instanceof 和 类型转换instanceof实例类型转换补充1--Static总结class中结构静态导入包补充2--抽象类补充3--接口补充3--内部类1.成员内部类2.静态内部类3.局部内部类4.匿名内部类
封...
封装
该露的露,该藏的藏
我们程序设计要追求"高内聚,低耦合"。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
记住这句话就够了:属性私有,get/set
package com.oop.Test04;
//类 private:...
多态
动态编译:类型:可扩展性
即同一方法可以根据发送对象的不同而采用多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)
多态存在的条件
有继承关系
子类重写父类方法
父类引用指向子类对象
注意:多态是方法的多态,属性没有多态性
instance of (类型转换)引用类型
多态注意事项...
方法调用
1.若不是静态类,在调用的时候要将此方法实例化。
package com.xiaochen.method;
public class Use {
public static void main(String[] args) {
student student = new student();
student.say();
}
}...
super注意点: 1.super调用父类的构造方法,必须在构造方法的第一个 2.super 必须只能出现在子类的方法或者构造方法中 3.super和this不能同时调用构造方法VS this: 代表的对象不同: this:本身调用者这个对象 super:代表分类对象的应用 前提:this:有没有继承都可以使用 super...
文章链接:https://www.dianjilingqu.com/3844.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。