zoukankan      html  css  js  c++  java
  • 关于多态

      1 public class Polymorphism {
      2 
      3     
      4     /**
      5      * @param args
      6      */
      7     public static void main(String[] args) {
      8 
      9         Human personA = new man();
     10 //        personA.sleep();
     11 //        personA.eat();
     12         System.out.println("***********************************************");
     13         man personB = new man();
     14 //        personB.write();
     15 //        personB.eat();
     16         System.out.println("***********************************************");
     17         woman personC = new woman();
     18 //        personC.eat();
     19 //        personC.cook();
     20 //        personC.speak();
     21         System.out.println("***********************************************");
     22     }
     23 
     24 }
     25 
     26 abstract class Human{
     27     int i=0;
     28     static{
     29         System.out.println("This is Human static block");
     30     }
     31     public Human(){
     32         System.out.println("This human constructor");
     33         fun();
     34     }
     35     public void eat(){
     36         System.out.println("human eat"+1);
     37     }
     38     public void speak(){
     39         System.out.println("human hello");
     40     }
     41     public abstract void sleep();
     42     public void fun(){
     43         System.out.println("This human fun");
     44     }
     45 }
     46 class man extends Human implements writer{
     47     int i = 10000;
     48     static{
     49         System.out.println("This is man static block");
     50     }
     51     public man(){
     52         System.out.println("This man constructor");
     53         fun();
     54     }
     55     public void work() {
     56         System.out.println("man is working");
     57     }
     58 
     59     @Override
     60     public void sleep() {
     61         System.out.println("man sleep");
     62         
     63     }
     64     
     65     public void speak() {
     66         System.out.println("man is speaking");
     67     }
     68 
     69     @Override
     70     public void write() {
     71         
     72         System.out.println("man is writing");
     73         
     74     }
     75     
     76     public void eat(){
     77         System.out.println("man eat"+i);
     78     }
     79 
     80     @Override
     81     public void think() {
     82 
     83         System.out.println("man is thinking");
     84     }
     85     public void fun(){
     86         System.out.println("This man fun");
     87     }
     88 }
     89 class woman extends Human{
     90 
     91     static{
     92         System.out.println("This is woman static block");
     93     }
     94     
     95     public woman(){
     96         System.out.println("This is woman constructor");
     97         fun();
     98     }
     99     public void fun(){
    100         System.out.println("This woman fun");
    101     }
    102     
    103     @Override
    104     public void sleep() {
    105         System.out.println("woman sleep");
    106     }
    107     
    108     public void cook(){
    109         System.out.println("woman is cooking");
    110     }
    111     
    112     public void speak(){
    113         System.out.println("woman is speaking");
    114     }
    115 }
    116 
    117 interface writer{
    118     int num = 1;
    119     public void write();
    120     public void think();
    121 }

    这段代码一共描述了三种情况:1.子类的引用指向子类的对象;2.父类的引用指向子类的对象。3.父类和子类中的静态块执行的顺序。

    一、子类的引用指向子类的对象时,先运行父类的构造方法,然后运行子类的构造方法。如果有静态块,则先运行父类中的静态块,然后运行子类中的静态块。然后运行父类子类的构造方法。

    二、父类的引用指向子类的对象时,构造方法及静态块的运行顺序同上。引用可以调用父类中的方法,此时相当于将子类隐式的强制类型转换为父类对象。

    三、静态块及静态变量均只加载一次,加载到内存的静态区中。

    四、构造方法中调用某一方法,采取就近原则,若子类中有则调用子类的方法,若子类中无则向上查询。

  • 相关阅读:
    bootstrap的验证和确认对话框
    Jquery.Datatables 基本创建方法
    DOM – (w3school)1.DOM 方法 + 2.DOM属性 + 3.DOM 元素
    Jquery.Datatables 基本设置的中文注解
    修改android studio中的avd sdk路径、avd sdk找不到的解决方案
    一个人至少是需要学习3种语言的
    Framework7:不会Objective-C,也能开发iOS7应用
    私人定制,十款最佳Node.js MVC框架
    PHP开发框架流行度排名:Laravel居首
    仅用移动开发服务:开发native应用
  • 原文地址:https://www.cnblogs.com/chlde/p/2744103.html
Copyright © 2011-2022 走看看