java编程思想-多态

java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是动态绑定即运行时绑定。

public class test
{
    private void f()
    {
        System.out.println("private f()");
    }
    public static void main(String[] args)
    {
        test t = new Derived();
        t.f();
    }
}

class Derived extends test
{
    public void f()
    {
        System.out.println("public f()");
    }
}
/*
private f()
private 方法被自动认为是final方法,没有多态,静态绑定,直接调用基类的方法
*/

只有普通的方法调用可以是多态的,如果你直接访问某个域,这个访问将在编译期进行解析,没有多态

class Super
{
    public int field = 0;
    public int getField(){return field;}
}
class Sub extends Super
{
    public int field =1;
    public int getField(){return field;}
    public int getSuperField(){return super.field;}
}
public class test
{
    public static void main(String[] args)
    {
        Super sup = new Sub();
        System.out.println(sup.field+"  "+sup.getField());
        Sub sub = new Sub();
        System.out.println(sub.field+"  "+sub.getField()+"  "+sub.getSuperField());
    }
}
/*
0  1
1  1  0
*/

如果某个方法是静态的,它的行为不具有多态性。

class Super
{
    public static void getField(){System.out.println("Super");}
}
class Sub extends Super
{
    public static void getField(){System.out.println("sub");}
}
public class test
{
    public static void main(String[] args)
    {
        Super sup = new Sub();
        sup.getField();
    }
}
/*
Super
*/
原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/4895684.html