多态的成员特点:
1、成员变量,编译时看左边,运行的时候看右边
2、成员方法,编译时看左边,运行的时候看右边
3、静态方法,编译时看左边,运行的时候看左边
package fangfa.com;
public class JieKou {
public static void main(String[] args) {
/*
* 多态的成员特点:
* 1、成员变量,编译时看左边,运行的时候看右边
* 2、成员方法,编译时看左边,运行的时候看右边
* 3、静态方法,编译时看左边,运行的时候看左边
*/
//父类的引用指向子类的对象
father ss = new son();
//输出的是父类的成员变量
System.out.println(ss.num);
//运行的是子类的方法
ss.name1();
//运行的是父类的静态方法
ss.name2();
}
}
class father{
int num = 20;
public void name1() {
System.out.println("我是父类方法");
}
public static void name2() {
System.out.println("我是父类静态方法");
}
}
class son extends father{
int num = 10;
public void name1() {
System.out.println("我是子类方法");
}
public static void name2() {
System.out.println("我是子类静态方法");
}
}
多态中向上转型与向下转型:
引用类型之间的转换:
向上转型:
由小到大(小指的是子类型,大指的是父类型 )
向下转型:
由大到小
基本数据类型的转换:
自动类型的转换,有小到大(byte-short-char---int---long---float---double)
布尔不能参与转换
强制类型的转换,由大到小(有可能损失精度)
package fangfa.com;
public class JieKou {
public static void main(String[] args) {
father src = new son();//此处相当于子类型向上转换为父类型
src.name();
//强制转换,向下转型,当父类中没有相应的成员的时候,需要调用子类中的成员方法
son set = (son)src;
set.name1();
}
}
class father{
public void name() {
System.out.println("吃饭");
}
}
class son extends father{
//方法重写
public void name() {
System.out.println("啃骨头");
}
public void name1() {
System.out.println("狗刨");
}
}
多态优缺点的演示:
package fangfa.com;
/*
*
* 多态的优缺点
* 优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性
缺点:无法直接访问子类特有的成员
*/
public class JieKou {
public static void main(String[] args) {
MiFactory factory = new MiFactory();
factory.createPhone(new MiNote());
factory.createPhone(new RedMi());
}
}
class MiFactory {
/*public void createPhone(MiNote mi) {
mi.call();
}
public void createPhone(RedMi mi) {
mi.call();
}*/
public void createPhone(Phone p) {
p.call();
}
}
interface Phone {
public void call();
}
//小米Note
class MiNote implements Phone{
public void call() {
System.out.println("小米Note打电话");
}
}
//红米
class RedMi implements Phone {
public void call() {
System.out.println("红米打电话");
}
}
382

被折叠的 条评论
为什么被折叠?



