Java学习ing,整理一些知识,希望对大家有所帮助,也请大佬多多指教!
一、多态描述
多态概述 : 同一操作作用于不同对象,可以产生不同的执行结果。
例子:父类:宠物类
叫()
子类:
猫 叫()-----喵喵喵
狗 叫()-----汪汪汪
都是叫,但产生了不同的结果
多态前提:
1、继承
2、方法的重写
多态实现:
父类 对象名 = new 子类();
public class DuoTaiDemo {
public static void main(String[] args) {
//多态
Pets pets = new Cat();
pets.voice();//喵喵喵
Pets pets1 = new Dog();
pets1.voice();//汪汪汪
}
}
//父类
class Pets{
public void voice(){
System.out.println("发出叫声");
}
}
//子类
class Dog extends Pets{
public void voice(){
System.out.println("汪汪汪");
}
}
class Cat extends Pets{
public void voice(){
System.out.println("喵喵喵");
}
}
二、多态成员的访问特点
1、成员变量
编译看父类(左边),运行看父类(左边)
public class DuoTaiDemo2 {
public static void main(String[] args) {
Fu1 fu1 = new Zi1();
System.out.println(fu1.num);//10
class Fu1{
//成员变量
public int num = 10;
}
class Zi1 extends Fu1{
public int num = 20;
}
2、成员方法
编译看父类(左边),运行看子类(右边)
public class DuoTaiDemo2 {
public static void main(String[] args) {
Fu1 fu1 = new Zi1();
fu1.method();//Zi method(),运行的结果为子类方法的结果
//而调用子类单独的方法就会报错
//fu1.method2();报错
}
}
//父类
class Fu1{
//成员方法
public void method(){
System.out.println("Fu method()");
}
//子类
class Zi1 extends Fu1{
//成员方法
public void method(){
System.out.println("Zi method()");
}
public void method2(){
System.out.println("Fu method2()");
}
}
3、static方法
编译看父类(左边),运行看父类(左边)
public class DuoTaiDemo2 {
public static void main(String[] args) {
Fu1 fu1 = new Zi1();
Fu1.staticMethod();//Fu staticMethed()
}
class Fu1{
public static void staticMethod(){
System.out.println("Fu staticMethod()");
}
}
class Zi1 extends Fu1{
public static void staticMethod(){
System.out.println("Zi staticMethod()");
}
}
三、多态的优缺点
1、多态的优点
提高了代码的维护性(由继承来保证);
提高了代码的扩展性(由多态来保证)
2、多态的缺点
不能访问子类特有的功能,所以如果要访问子类特有功能,就要用到多态中的转型。
向上转型:由父到子,父类的引用指向子类的对象
父类 引用名 = new 子类();
向下转型:由父到子,父类的引用转换为子类引用
子类 引用名 = (子类)父类引用
public class DuoTaiDemo5 {
public static void main(String[] args) {
Pet5 pet5 = new Dog5();
pet5.eat();
pet5.sleep();
Dog5 dog5 = (Dog5) pet5;
dog5.dogMethod();//调用狗类特有的方法,吃骨头
Pet5 pet51 = new Cat5();
pet51.eat();
pet51.sleep();
Cat5 cat5 = (Cat5) pet51;
cat5.catMethod();//调用猫类特有的方法,吃鱼
}
}
class Pet5{
public void eat(){
System.out.println("吃东西");
}
public void sleep(){
System.out.println("睡觉");
}
}
class Dog5 extends Pet5{
public void dogMethod(){
System.out.println("吃骨头");
}
}
class Cat5 extends Pet5{
public void catMethod(){
System.out.println("吃鱼");
}
}