c#和Java: 1.首先,子類繼承了父類的屬性和方法,但是子類並沒有繼承父類的私有欄位。 2.子類並沒有繼承父類的構造函數,但是。子類會預設的調用父類無參數的構造函數,創建父類對象,讓子類可以使用父類中的成員。 所以,如果在父類中重新寫了一個有參數的構造函數之後,那個無參數的就被幹掉了,子類就調用 ...
c#和Java:
1.首先,子類繼承了父類的屬性和方法,但是子類並沒有繼承父類的私有欄位。
2.子類並沒有繼承父類的構造函數,但是。子類會預設的調用父類無參數的構造函數,創建父類對象,讓子類可以使用父類中的成員。
所以,如果在父類中重新寫了一個有參數的構造函數之後,那個無參數的就被幹掉了,子類就調用不到了,所以子類會報錯。
解決辦法(c#):
1)、在父類中重新寫一個無參數的構造函數。
2)、在子類中顯示的調用父類的構造函數,使用關鍵字:base()
public class Person { private string _name; public string Name { get { return _name; } set { _name = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } private char _gender; public char Gender { get { return _gender; } set { _gender = value; } } public Person(string name, int age, char gender) { this.Name = name; this.Age = age; this.Gender = gender; } } public class Reporter : Person { public Reporter(string name, int age, char gender, string hobby) : base(name, age, gender) { this.Hobby = hobby; } private string _hobby; public string Hobby { get { return _hobby; } set { _hobby = value; } } public void ReporterSayHello() { Console.WriteLine("我叫{0},我是一名狗仔,我的愛好是{1},我是{2}生,我今年{3}歲了",this.Name,this.Hobby,this.Gender,this.Age); } }
在Java中:有必要介紹一下super關鍵字:
super關鍵字代表了父類空間的引用。 super關鍵字的作用: 1. 子父類存在著同名的成員時,在子類中預設是訪問子類的成員,可以通過super關鍵字指定訪問父類的成員。 2. 創建子類對象時,預設會先調用父類無參的構造方法,可以通過super關鍵字指定調用父類的構造方法。 super關鍵字調用父類構造方法要註意的事項: 1. 如果在子類的構造方法上沒有指定調用父類的構造方法,那麼java編譯器會在子類的構造方法上面加上super()語句。 2. super關鍵字調用父類的構造函數時,該語句必須要是子類構造函數中的第一個語句。 3. super與this關鍵字不能同時出現在同一個構造函數中調用其他的構造函數。因為兩個語句都需要第一個語句。 super關鍵字與this關鍵字的區別: 1. 代表的事物不一致。 1. super關鍵字代表的是父類空間的引用。 2. this關鍵字代表的是所屬函數的調用者對象。 2. 使用前提不一致。 1. super關鍵字必須要有繼承關係才能使用。 2. this關鍵字不需要存在繼承關係也可使用。 3. 調用構造函數的區別: 1. super關鍵字是調用父類的構造函數。 2. this關鍵字是調用本類的構造函數。
1 class Fu{ 2 int x = 10; 3 String name; 4 public Fu(){ 5 System.out.println("Fu類無參的構造方法.."); 6 } 7 public Fu(String name){ 8 this.name = name; 9 System.out.println("Fu類帶參的構造方法.."); 10 } 11 public void eat(){ 12 System.out.println("小頭爸爸吃番薯.."); 13 } 14 } 15 class Zi extends Fu{ 16 int x = 20; 17 int num; 18 public Zi(String name,int num){ 19 super(name); //指定調用了父類帶參的 構造方法... 20 this(); // 調用本類無參構造方法.. 21 //super(); //指定調用了父類無參構造方法。。。 22 System.out.println("Zi類帶參的構造方法.."); 23 } 24 public Zi(){ 25 System.out.println("Zi類無參的構造方法.."); 26 } 27 public void print(){ 28 System.out.println("x = " +super.x); 29 } 30 public void eat(){ 31 System.out.println("大頭兒子吃龍蝦.."); 32 } 33 } 34 35 class Demo{ 36 public static void main(String[] args) 37 { 38 Zi z = new Zi("狗娃"); 39 40 } 41 }
3.繼承的特性 繼承的單根性:一個子類只能有一個父類 繼承的傳遞性