Java面向對象三大特性

面向對象三大特性:

5.1繼承(extends)--

1.生成子類的過程

2.Super調用構造函數

class People{

String name;

int age;

People(){

System.out.println("pleple hava no ");

}

People(String name,int age){

this.name=name;

this.age=age;

System.out.println("there have");

}

void eat(){

System.out.println("eat");

}

}

class Student extends People{

int grade;

//在子類的構造函數當中,必須調用父類的構造函數,因爲子類繼承了父類的變量、方法,需使用super調用父類

Student(){

super();//調用父類中的相對應構造函數,如果不寫,編譯器會自動添加

System.out.println("student have no");

}

Student(String name,int age,int grade){

super(name,age);

this.grade=grade;

}

}

class TestS{

public static void main(String args[]){

Student student=new Student("zhangsan",10,3);

}

}

注意:super調用父類的構造函數時,必須放在第一位。

5.1.2 複寫(override

class People{

String name;

int age;

void introduce(){

System.out.println("my name is :"+name+",my age is:"+age);

}

}

//複寫(override)也被稱爲覆蓋或者重寫

//1.在具有父子關係的兩個類中

//2.父類和子類當中各有一個函數,這兩個函數的定義(返回值類型、函數名、參數值)相同

class Student extends People{

String address;

void introduce(){

super.introduce();

System.out.println("my home in"+address);

}

}

5.1.3對象轉型

1.對象的向上轉型

 

//一個引用能夠調用哪些成員(變量和函數),取決於這個引用的類型

//一個引用調用的方法取決於引用所指向的對象

class TestS{

public static void main(String args[]){

Student s=new Student();

Person p=s;//向上轉型

或者使用這種方式:Person p=new Student();

p.name="zhangsan";

p.age=20;

}

}

2.對象向下轉型

 

或者Person p=new Student();

Student s=(Student)p;

3.抽象類(用作父類、基類)與抽象函數:

 

 

abstract class PersonA{//一個類中有抽象函數,那麼類也必須定義爲抽象類

String name;

int age;

void introduce() {

System.out.println("my name is "+name+",age is:"+age);

}

abstract void eat();//抽象函數

}

class TestPa{

public static void main(String args[]){

PersonA p=new Chinese();//向上轉型爲PersonA父類

p.eat();//調用方法,此時這個方法不是抽象函數

}

}

class Chinese extends PersonA{

void eat(){

System.out.println("use it");//通過override對抽象函數複寫,使得子類可以生成對象

}

}

問題:抽象類可以有構造函數嗎?

可以有,因爲子類會自動調用super();

abstract class PersonA{

PersonA(){

System.out.println("PersonA fun");//構造函數

}

String name;

int age;

void introduce() {

System.out.println("my name is "+name+",age is:"+age);

}

abstract void eat();

}

class Chinese extends PersonA{

Chinese(){//構造函數

super();//默認調用

System.out.println("chinese fun");

}

void eat(){

System.out.println("use it");

}

}

抽象函數默認爲public

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章