class TA {
    public String s = "A";

    public String getS() {
        return s;
    }
}

class TB extends TA {
    public String s = "B";

    public String getS() {
        return s;
    }
}

public class TestInheritance {

    public static void main(String[] args) {
        TA a = new TA();
        TB b = new TB();
        a.s = "AA";
        b.s = "BB";

        a = b;
        // TA a2 = b;
        // System.out.println(a == a2);
        // System.out.println(a2.s);
        // System.out.println(a2.getS());

        // java的内存模型:成员变量是放在栈区?
        // 父类引用指向子类对象,方法是可以被覆盖的,但是成员变量是无法覆盖的?
        //
        // (2014.1.18 add)说明,加载TB类时加载了TA类,所以b这个引用地址(堆内存开始的地址)指向的空间
        // 大小为TA.class占用的内存大小和TB.class占用的内存空间,那么就可以解释
        // System.out.println(a.s);输出的结果为什么是'A'了吗?
        // 方法被重写了,但是成员变量不能被重写,所以还是两份
        System.out.println(a.s);
        System.out.println(b.s);
        System.out.println(a.getS());
        System.out.println(b.getS());
    }
}
View Code
public class TestComparisonOperator {

    public static void main(String[] args) {
        Long a1 = 19L;
        Long a2 = 19L;
        
        Long b1 = 1900L;
        Long b2 = 1900L;
        //小于128的数,可能会经常用到,所以会转换为基本变量而不是对象引用
        System.out.println(a1 == a2);
        System.out.println(b1 == b2);
        
    }
}
View Code