首页 > 代码库 > Java学习笔记4——多态
Java学习笔记4——多态
多态
1.引用多态:1)父类的引用可以指向本类的对象;2)父类的引用可以指向子类的对象
public static void main(String[] args) { Animal obj1 = new Animal(); //父类的对象指向本类 Animal obj2 = new Dog(); //父类的引用可以指向子类的对象 //Dog obj3 = new Animal(); 不可以使用子类的引用指向父类 }
2.方法多态 1)创建本类对象时,调用的方法为本类方法;2)创建子类对象时,调用的方法为子类重写的方法或者继承的方法
public class Initial { public static void main(String[] args) { // TODO Auto-generated method stub Animal obj1 = new Animal(); //父类的对象指向本类 Animal obj2 = new Dog(); //父类的引用可以指向子类的对象 //Dog obj3 = new Animal(); 不可以使用子类的引用指向父类 obj1.eat(); obj2.eat(); } }
注意:如果是子类中独有的方法,则不能通过“父类的引用指向子类的对象”
3.引用类型转换
1)向上类型转换(隐式/自动类型转换)——小类型到大类型
2)向下类型转换(强制类型转换)——大到小
3)instanceof运算符,解决引用对象类型,避免类型转换的安全问题——判断某个类型是否是某个类型的子类型,返回一个bool值
Dog dog = new dog(); Animal animal = dog; //自动类型提升 向上转换 Dog dog2 = (Dog)animal; //向下类型转换 Cat cat = (Cat)animal;//强制类型转换Cat,编译器不会报错;但是animal对象在内存中是dog类型,强制转换成cat类型会造成类型不匹配——cat已经不是animal的子类型了 //使用instanceof Dog dog = new Dog(); Animal animal = dog; if(animal instanceof Dog){ Dog dog2 = (Dog)animal; }else{ System.out.println("无法dog"); } if(animal instanceof Cat){ Cat cat = (Cat)animal; }else{ System.out.println("无法进行类型转换---"); }
4.Java中的抽象
1)语法定义:使用abstract修饰
2)场景:a)父类只是知道子类包含的方法,无法确切子类的方法如何实现——子类必须有那些方法;b)从多个具有相同特征类中抽象一个抽象类,以抽象类作为子类模版
3)作用:限制规定子类必须实现的某些方法,但不关注实现细节
4)使用规则:a.abstractd 定义抽象方法,只有声明,不需要实现;b.包含抽象方法的类是抽象类;c.抽象类中可以包含普通方法,也可以没有抽象方法;d.抽象类不能直接创建,可以定义引用变量
抽象类: package com.imooc; public abstract class Telephone { public abstract void call(); public abstract void message(); } 子类1: package com.imooc; public class SmartPhone extends Telephone { public void call() { // TODO Auto-generated method stub System.out.println("通过语音电话"); } public void message() { // TODO Auto-generated method stub System.out.println("通过语音短信"); } } 子类2: package com.imooc; public class CellPhone extends Telephone { public void call() { // TODO Auto-generated method stub System.out.println("通过键盘电话"); } public void message() { // TODO Auto-generated method stub System.out.println("通过键盘短信"); } } 接口函数: package com.imooc; public class Initial { public static void main(String[] args) { // TODO Auto-generated method stub Telephone tel = new CellPhone(); tel.call(); tel.message(); Telephone tel2 = new SmartPhone(); tel2.message(); tel2.call(); } }
5.Java中的接口
1)接口:接口定义了某一些类所遵循的规范,接口不关心类的内部数据,不关心类的方法实现细节,只规定类里必须提供的方法。
2)使用interface关键字,而类用class。接口中都是常量或抽象方法
3)接口用来被继承和被实现的,使用public,不能使用private和protect,interface前面使用abstract,abstract、public static final可以省略
public abstract interface IPlayGame {
public static final int a = 8;
public abstract void playGame(); // 不能 ...playGame(){};
}
注意:接口中方法不能有方法体 例如:错-void gg(){} 对-void gg();
定义接口: public abstract interface IPlayGame { public static final int a = 6; public abstract void playGame(); } 继承接口: public class psp implements IPlayGame { public void playGame() { // TODO Auto-generated method stub System.out.println("具有玩游戏的功能"); } }
Java学习笔记4——多态