返回博主主页

java类 static成员变量 以及方法都会被子类继承吗

 

 

package com.java.sjq.superclassStatic;

/**
 * java类 static成员变量 以及方法都会被子类继承吗?
 * 结论:子类可以访问,无法继承,所以无法多态。
 */
public class P implements Cloneable{
    String name;
    @Override
    public Object clone() throws CloneNotSupportedException {
        P p = null;
        try {
            p = (P)super.clone();
        } catch ( ClassCastException e) {
            e.printStackTrace();
        }
        return p;
    }

    static public  int a=2;
    static void fun(){
        System.out.println("P-static-fun"+ a);
    }
    void gun(){
        System.out.println("p-gun"+a);
    }

    public static void main(String[] args) {
        S.fun(); // s-static-fun2
        fun(); // P-static-fun3
        P p = new P();
        S s = new S();
        p.f2(s);  // P-static-fun3
        p.f3(s);  // s-gun3

    }
    void f2(P p){  // 虽然 p.f2(s) 传入的是示例s,但是还是无法下转型为类S的实例,于是p.fun()调用的还是类P的静态方法fun()
        p.fun();
    }
    void f3(P p){
        p.gun();
    }
}

class S extends P{
    //    static public  int a=2;
    static void fun(){
        System.out.println("s-static-fun"+ a);
        a++; // S 自己定义了a,a++对P的a没影响;若S没有定义a,那么a++就会更改P的a
    }
    void gun(){
        System.out.println("s-gun"+a);
    }
}

 

posted @ 2022-05-31 20:20  懒惰的星期六  阅读(121)  评论(0编辑  收藏  举报

Welcome to here

主页