tij学习笔记(通过代码话多态)

来源:互联网 发布:致知是什么意思 编辑:程序博客网 时间:2024/06/06 02:51

    多态的一般形式Father f = new Son()。通过以下这个例子来说明多态的各个知识点,如果能完全弄明白,就掌握的差不多了。

    一,向上转型的对象有以下特点,看以下代码

 

 

 


public class PolyTest {
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
         Poly p = new Son(1);
         p.s 
= 0;
         p.p3();
         p.p2();
//       p.s1 = 0;子类的新增变量不可用
    }

}

class Poly{
    
int s;
    
void p1(){
        p3();
    }
    
static void p2(){
        System.out.println(
"Poly");
    }
    
    
void p3(){
        System.out.println(
"Poly");
    }
    
    Poly(
int i){
        
    }
    
}
class Son extends Poly{
    
int s1;
    Son(
int i) {
        
super(i);
    }
//    Son(int i) {
//    }必须要super继承父类
    
//    Son(){}父类没有的构造方法不能写

    
static void p2(){
        System.out.println(
"Son");
    }
    
    
void p3(){
        System.out.println(
"Son");
    }
    
//    void p2(){
//        System.out.println("Son");
//    }static类型也要一致
   
    
}
/**Output
  *Son
  *Poly
  
*/ 

 

    1,向上转型的对象不能操作子类的新增成员变量,不能使用子类的新增方法。 

    2,可以操作子类继承或者隐藏的成员变量,也可以使用子类继承或重写的方法。

    3,一定是调用重写的方法。

    二,子类覆盖的方法权限一定不能比基类小

    权限按大小排列为:public  protected friendly(默认) private。

    如果基类是final型(private默认是final型)方法,则子类重写的方法为新方法,与父类为两个方法。

    三,域与static方法

    当对象向上转型为引用时,域不存在多态。一般情况域都用private,所以这条没什么意义。

    static型方法也不具有多态性。

    四,初始化问题

   

class Poly2{
    
void draw(){
        System.out.println(
"Polydraw");
    }
    Poly2(){
        System.out.println(
"Poly before draw");
        draw();
        System.out.println(
"Poly after draw");
    }
}
class Son2 extends Poly2{
    
private int r = 1;
    
void draw(){
        System.out.println(
"Sondraw.r = " + r);
    }
    Son2(
int r){
        
this.r = r;
        System.out.println(
"Son.r = "+ r);

    }
}
public class PolyTest2 {
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
       Poly2 s = new Son2(5);
//       new Son2();
//       Son2 s2 = new Son2();三种初始化情况都一样
    }

}
/**Output
  *Poly before draw
  *Sondraw.r = 0
  *Poly after draw
  *Son.r = 5
  
*///~

 

    由上面的代码可见,初始化过程是这样的

    1,所有域初始化为0(boolean值为false)。

    2,从基类开始调用构造器。在上面的代码中,基类调用被重写的Son2.draw()方法,并且是在Poly2构造前调用,所以r的值是0。

    3,按申明顺序调用成员的初始化方法。

    4,导出构造器的主体。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 排便排不出来怎么办 大便排不出去怎么办 婴儿三个没大便怎么办 三天不上大便怎么办 婴儿几天没大便怎么办 排便不好肚子大怎么办 三天不拉大便怎么办 几天不拉大便怎么办 七天不大便该怎么办 新生儿嘴巴很干怎么办 一岁宝宝过敏怎么办 母乳喂养宝宝不吃奶瓶怎么办 宝宝吃奶特别急怎么办 宝宝吃奶粉消化不良怎么办 喝羊奶大便干燥怎么办 宝宝换奶粉发烧怎么办 婴儿吃了蛋白怎么办 新生儿吃了蜂蜜怎么办 婴儿吃蜂蜜中毒怎么办 宝宝吃蜂蜜中毒怎么办 宝宝对蛋清过敏怎么办 宝宝吃蛋清过敏怎么办 婴儿吃蛋清过敏怎么办 初生婴儿拉水怎么办 婴儿鸡蛋过敏了怎么办 婴儿鸡蛋白过敏怎么办 母牛产后涨奶怎么办 宝宝吃奶时间长边吃边睡怎么办 宝宝吃海鲜过敏怎么办 小孩吃虾过敏怎么办 三个月婴儿不吃奶粉怎么办 宝宝秋季腹泻发烧怎么办 婴儿肚子有积食怎么办 小孩眼睛有点斜怎么办 孕妇血糖高便秘怎么办 宝宝蛋清过敏了怎么办 婴儿对鸡蛋过敏怎么办 宝宝断奶喝酸奶怎么办 宝宝被异物卡住怎么办 宝宝夜里膝盖痛怎么办 宝宝吃蛋白过敏怎么办