super在繼承樹中的用法
/**
* 測試super的用法 在子類中調(diào)用父類的內(nèi)容
* 繼承樹追溯
*/
public class TestSuper {
? ?int age;
? ?public void set(){
? ? ? ?age = 100;
? ? ? ?System.out.println("TestSuper的age="+age);
? ?}
}
class T2 extends TestSuper{
? ?int age;
? ?//重寫age
? ?public void set(){
? ? ? ?age = 200;
? ? ? ?super.set();
? ? ? ?//調(diào)用父類TestSuper的方法set()
? ? ? ?System.out.println(super.age);
? ? ? ?//調(diào)用父類TestSuper的屬性age
? ? ? ?System.out.println("T2的age="+age);
????????//子類重寫age之后 子類生成的對象.age遮住了父類的屬性age 但父類age沒有改變依然存在
? ?}
? ?public static void main(String[] args) {
? ? ? ?new T2().set();
? ? ? ?//new對象并直接使用方法set()
? ? ? ?T2 t = new T2();
? ? ? ?//在子類以外的地方無法使用super.調(diào)用父類
? ?}
}
class T3{
? ?TestSuper t = new TestSuper();
? ?int age;
? ?//組合component TestSuper.age和T3對象名.age不影響 可在子類之外分別調(diào)用
? ?public void set(){
? ? ? ?System.out.println();
? ?}
? ?public static void main(String[] args) {
? ? ? ?T3 tt = new T3();
? ? ? ?tt.age = 100;
? ? ? ?tt.t.age = 200;
? ? ? ?tt.set();
? ? ? ?tt.t.set();
? ?}
}
class T4{
? ?T4(){
? ? ? ?//構(gòu)造方法第一行默認 Super();
? ? ? ?System.out.println("創(chuàng)建父類");
? ?}
? ?T4(int a){
? ? ? ?System.out.println(a);
? ?}
}
class T5 extends T4{
? ?T5(){
? ? ? ?//構(gòu)造方法第一行默認 Super();
? ? ? ?System.out.println("創(chuàng)建子類");
? ?}
? ?public static void main(String[] args) {
? ? ? ?new T5();
? ? ? ?//創(chuàng)建類時從父類往下逐一創(chuàng)建 Object>T4>T5
? ?}
}
class T6 extends T4{
? ?T6(){
? ? ? ?super(100);
? ? ? ?//手動設(shè)定有參構(gòu)造方法 不會生成默認super()
? ?}
? ?T6(int b){
? ? ? ?this();
? ? ? ?//調(diào)用無參構(gòu)造方法T6()
? ? ? ?System.out.println(b);
? ?}
? ?T6(int b,int c){
? ? ? ?this(b);
? ? ? ?System.out.println(c);
? ?}
? ?public static void main(String[] args) {
? ? ? ?new T6();
? ? ? ?//Object>T4(100)>T6 沒有用到T4()不打印創(chuàng)建父類
? ? ? ?new T6(2,3);
? ?}
}
class T7{
? ?static {
? ? ? ?System.out.println("加載父類時會加載靜態(tài)初始化塊,所以只要使用父類就會打印出這句話");
? ?}
? ?T7(){
? ? ? ?System.out.println("static隨類一起加載,先于構(gòu)造方法");
? ?}
}
class T8 extends T7{
? ?static {
? ? ? ?System.out.println("子類后加載");
? ?}
? ?T8(){
? ? ? ?System.out.println("后");
? ?}
}
class T9{
? ?public static void main(String[] args) {
? ? ? ?T8 t ?= new T8();
? ? ? ?//順序T7static靜態(tài)初始化塊>T8static>T7()構(gòu)造方法>T8()
? ?}
}