Java 多态
来源:互联网 发布:佳能ir2535i 网络驱动 编辑:程序博客网 时间:2024/06/03 18:19
类之间的关系2种
- 1.继承关系 is-a
- 人类 学生类
- 车 宝马
- 2.引用(包含、拥有) has-a
- 人 胳膊
- 车 轮子
多态
- 编译器多态 - 方法重载 方法名称相同方法参数不同。
- 运行时多态 - 在程序运行时判断到底是那个类.(父类还是子类),进而确定要调用的是父类方法还是子类方法。
- 所谓多态就是子类对象和父类对象相互转化的关系
- 1.向上转型 父类 父类对象 = new 子类对象() Animal a1 = new Cat(“小花”);
- 2.向下转型 子类 子类对象 = (父类)对象; //强转
多态实现的关键
- 1.要有继承关系
- 2.要有方法重写
3.父类引用指向子类对象
- 3.1编写方法时使用父类做形参 public void feed(Animal animal)
3.2将子类对象作为实参传递给改方法
Animal a1 = new Cat(“小花”);
student.feed(a1);- 3.3运行时根据实参类型动态决定调用那个方法
里氏替换原则:所有出现父类对象的地方都可以用子类替换
多态的好处
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
匿名类对象
- xiaoxin.feed(new Cat1(“小白”));//因为该cat1对象只在程序代码中使用1次,以后不会再次引用操作它,所有我们使用匿名对象。就使用一次,使用后立即释放。
- 过去写
- Cat1 cat1 = new Cat1(“小白”);
- xiaoxin.feed(cat1);
抽象类
- 用abstract关键字修饰的类 叫抽象类。不希望被实例化(new)类,一般可创建为抽象类
抽象方法
使用abstract关键字修饰的方法,只有方法的声明,不包含方法的实现
public abstract void eat();
- 含有抽象方法的类一定是抽象类
抽象类是不能实例化的只能被继承。抽象类的子类必须重写父类的抽象方法
@Overridepublic void eat() { System.out.println("我是小狮子,我叫"+this.name+"正在吃人");}
- 若未重写相关抽象方法。则子类也是抽象类
构造函数,static,final,private的方法 不要加abstract关键字。
子类继承父类可以
public 可以被任意类调用
protected 只能被子类调用
默认 只能被同包内的类调用
private 不能被其他类访问
定义类时 可以使用的修饰符是 public final abstract 或者不写
静态(类)方法和静态成员变量
static String name; //仅能调用其他的静态方法,只能访问静态数据,不能引用this,和super public static void saveMoney()
* 在方法声明中加入关键字static 表示无需创建类对象即可调用的方法:
* 1.类对象根本不存在。例如你要创建类对象
* 2.不需要关联任何类对象时候。例如Math类中的相关算数方法
* 静态成员变量和静态方法都是使用 类名.属性名 类名.方法名 去掉用。
Father.name = “王远航”;
Father.saveMoney();
* 静态的变量本质上变为全局变量,就是声明一个对象不会产生多个静态变量的拷贝,只会分配一块内存空间,共享同一个变量。
A
int age;
public void sayHi();
B extends A
public void sayHi();
super的作用
- 1.直接饮用 。类似于this。相当于指向当前对象的父类
- super.age
- 2.子类成员与父类成员同名
- super.sayHi();
- 3.引用构造函数
- super()
fianl的使用
- fianl修饰的类 : 不允许被继承 final和abstract冲突不要同时加
- fianl修饰的方法: 不允许被子类重写 override
- final修饰的成员变量: 成员变量是常量,只能被赋值一次。赋值后无法改变#
- Java学习 java -- 多态
- java多态
- java多态
- java多态
- java多态
- Java多态
- java多态
- JAVA@多态
- Java多态
- java 多态
- Java多态
- java多态
- [Java] 多态
- JAVA多态
- Java多态
- java多态
- java 多态
- java多态
- 实验一 线性表的基本操作实现及其应用
- VirtualDOM与diff(Vue实现)
- 未来全面屏手机畅想
- tessract4.0 + vs2015的配置以及使用
- 读取Properties配置文件的几种方式
- Java 多态
- PAT——1018. 锤子剪刀布
- 1010. 一元多项式求导 (25)
- 算法复杂度的分析【递归分治法】
- 辗转相除法求最大公约数
- github如何创建站点,托管网站
- 面试时,遇到的数据库题
- 机器学习第十六课part1(beta分布,dirichlet分布)
- Java – Convert IP address to Decimal Number