zoukankan      html  css  js  c++  java
  • 面向对象之多态

    1)多态:向上转型(父类引用指向子类对象)

    package
    OOP.com.polymorphic; /*多态向上转型:父类引用指向子类对象。 * 1.普通父类型 引用变量=new 子类对象();//这个父类型不是抽象类 * */ class Animal{ } class Dog extends Animal{ } public class demo01 { public static void main(String[] args) { Animal a=new Dog();//父类引用(Animal)指向子类的Dog对象 //子类型(Dog)向上提升为父类型(Animal) 不可以反过来 } }
    package OOP.com.polymorphic;
    /**
     * 多态向上转型第二种格式:
     * 抽象父类型  引用变量名=new 子类对象();
     * */
    abstract class Person{
    
    }
    class Worker extends Person{
    
    }
    public class demo02 {
        public static void main(String[] args) {
            Worker w=new Worker();
            Person p=new Worker();
        }
    }
    package OOP.com.polymorphic;
    /*
    *多态向上转型的第三种格式:
    * 父接口类型  引用变量名=new 接口的实现类对象
    * */
    
    interface Smoking{
    
    }
    class Student implements Smoking{
    
    }
    public class Demo03 {
        Smoking s=new Student();//学生实现了抽烟功能
    }
    2)多态:向下强转

    package
    OOP.com.polymorphic.com.polymorphic; /*向下转型:将父类型强制转换成子类型 * */ class Person{ public void eat(){ System.out.println("人吃饭"); } } class Student extends Person{ public void study(){ System.out.println("学生学习"); } } public class demo { public static void main(String[] args) { Person p=new Student(); //父类(Person)引用指向子类对象(new Student) p.eat(); //我们把学生看作一个人,因为所有人都吃饭,因此可以调eat方法 //p.study(); // 不可以,因此刻把学生看作一个人,不是所有人都学习 //把p由原来的Person类型转换成Student Student s=(Student)p;//p由person类型转换成Student //向下转型 父类型转换成子类型 //原来我们把学生称作一个人,现在相当于回归本色,把学生叫成学生 s.study();//学生吃饭 s.eat();//学生学习 } }
    3)多态访问变量的特点:看引用变量左边

    package
    OOP.com.polymorphic.visit; /*多态成员变量的访问特点: * 编译时期:看左边 * 运行期:看左边 * */ class Fu{ int number=4; } class Zi extends Fu{ int number=10; } public class Demo04 { public static void main(String[] args) { Fu f= new Zi();//父类引用指向子类对象 System.out.println(f.number);//向上转型 } }
    4)多态访问成员方法的特点:这里主要表现为派生类覆盖超类的方法,
    若子类未重写,则直接继承,即不存在覆盖。


    package
    OOP.com.polymorphic.visit; /*多态中成员方法的访问特点: * 编译时期: Fu1 f=new zi1(); * f.method(); * // f.function(); * 编译时期会看多态形式等号左边的类型中是否定义调用的成员方法 * 如果有编译通过,如果没有编译失败 * 运行时期: * 运行期会看多态形式右边的类型是否定义了调用成员方法,如果有 * 则直接执行并调用重写的方法,没有则调用超类的方法,因为派生类 * 继承了超类的方法。 * */ class Fu1{ public void method(){ System.out.println("fu1方法"); } } class zi1 extends Fu1{ //重写父类的方法 public void method(){ System.out.println("zi1方法"); } //定义一个子类特有的方法 public void function(){ System.out.println("子类特有的方法"); } } public class Demo05 { public static void main(String[] args) { Fu1 f=new zi1(); f.method();//运行结果为子类所特有的方法 //f.function(); } }
    5)instanceof:判断引用变量是否是右边类或者接口的一个实例

    package
    OOP.com.polymorphic.visit; /* * instanceof 运算符 * 格式: * 引用变量名instanceof类名/接口名 * 运算结果为boolean类型。 * 引用变量是否属于右边的一个实例对象。 * */ interface JD{ } class Animal{ } class Dog extends Animal implements JD{ } class Sheep extends Animal{ } public class InstanceofDemo { public static void main(String[] args) { //1.普通类的形式 Dog d=new Dog(); boolean b1=d instanceof Dog; System.out.println(b1);//判断d引用的对象(new Dog())能否是Dog类型 //2.多态形式 Animal a=new Dog(); boolean b2=a instanceof Dog;//判断a引用指向对象(new Dog())是Dog类型 System.out.println(b2); //3.接口多态形式 JD jd=new Dog(); boolean b3=jd instanceof Dog; System.out.println(b3); //4.instanceof为false Animal s=new Sheep(); boolean b4=s instanceof Dog; System.out.println(b4); } }
    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    5.User Interface/Custom Components
    5.User Interface/Styles and Themes
    5.User Interface/Accessibility
    5.User Interface/Drag and Drop
    5.User Interface/Notifications
    5.User Interface/Dialogs
    Menu综合运用
    5.User Interface/ActionBar
    5.User Interface/Menu
    5.User Interface/Input Controls
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/10296125.html
Copyright © 2011-2022 走看看