什么是继承 让类与类之间产生了子父类关系继承的好处是 提高代码的复用性和维护性java中继承的特点是 只支持单继承、不支持多继承,但是可以多层继承四种权限修饰符是 public protected 默认 privatefinal关键字的特点是 修饰类:类不能被继承 修饰方法:方法不能被重写 修饰变量:变量就变成了常量
1)多态的前提和体现2)多态成员变量:编译看左边(父类),执行看左边(父类)3)多态成员方法:编译看左边(父类),执行看右边(子类)4)多态的好处和弊端5)多态中的转型存在的风险[ClassCastException]6)instanceof
同一个对象,在不同时刻表现出来的不同形态
举例:猫
我们可以说猫是猫:猫 cat = new 猫();
我们也可以说猫是动物:动物 animal = new 猫();
这里猫在不同的时刻表现出来了不同的形态,这就是多态
多态的前提和体现
1)有继承/实现关系
2)有方法重写
3)有父类引用指向子类对象
构造方法:同继承一样,子类会通过 super 访问父类构造方法
成员变量:编译看左边(父类),执行看左边(父类)
成员方法:编译看左边(父类),执行看右边(子类)
---实现案例---------------------------------
class Fu {int num = 10;public void method(){System.out.println("Fu.. method");}
}
class Zi extends Fu {int num = 20;public void method(){System.out.println("Zi.. method");}
}
public class Test2Polymorpic {public static void main(String[] args) {Fu f = new Zi();System.out.println(f.num);f.method();}
}
结果:10Zi.. method
-------------------------------------------
多态的好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的任意子类对象
多态的弊端:不能使用子类的特有功能
---实现案例---------------------------------
abstract class Animal { public abstract void eat();}
class Dog extends Animal {public void eat() { System.out.println("狗吃肉"); }public void watchHome(){ System.out.println("看家"); }
}
class Cat extends Animal {public void eat() { System.out.println("猫吃鱼"); }
}
public class Test3Polymorpic {public static void main(String[] args) {useAnimal(new Dog());useAnimal(new Cat());}public static void useAnimal(Animal a){ a.eat(); // Animal a = new Dog(); Animal a = new Cat(); 多态的好处//a.watchHome(); 多态的弊端:不能使用子类的特有功能}
}
-------------------------------------------
向上转型:从子到父,父类引用指向子类对象
向下转型:从父到子,父类引用转为子类对象
---实现案例---------------------------------
class Fu {public void show(){ System.out.println("Fu..show...");}
}
class Zi extends Fu {@Overridepublic void show() { System.out.println("Zi..show..."); }//子类特有的方法public void method(){ System.out.println("我是子类特有的方法, method");}
}
public class Test4Polymorpic {public static void main(String[] args) {// 1. 向上转型 : 父类引用指向子类对象Fu f = new Zi();f.show();// 多态的弊端: 不能调用子类特有的成员// f.method();//如果费用调用子类特有的方法解决方案【A: 直接创建子类对象 B: 向下转型】// 2. 向下转型 : 从父类类型, 转换回子类类型Zi z = (Zi) f;z.method();}
}
-------------------------------------------
使用格式:变量名 instanceof 类型
通俗的理解:判断关键字左边的变量,是否是右边的类型,返回boolean类型结果
概述:如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException
--实现案例---------------------------------
abstract class Animal {public abstract void eat();}
class Dog extends Animal {public void eat() { System.out.println("狗吃肉"); }public void watchHome(){System.out.println("看家");}
}
class Cat extends Animal {public void eat() { System.out.println("猫吃鱼");}
}
//判断a变量记录的类型, 是否是Dog[如果不用instanceof判断,可能会出现ClassCastException]
if(a instanceof Dog){Dog dog = (Dog) a;dog.watchHome();
}
-----------------------------------
更多精彩内容:
http://www.gxcode.top/code
上一篇:WSUS排障