1. 概念:將這些類的共性內容,抽取到一個獨立的類中,讓獨立的類的多個類產生一種關係
2. 格式:class Zi extends Fu{}
3. 好處:1).提高了代碼的複用性和維護性
2).類與類之間產生了關係:耦合性,這種關係是多態的前提條件
4. Java開發的原則:高內聚,低耦合
5. 繼承的特點:
a) java中,只支持單繼承,不支持多繼承
b) 但可以多層繼承
6. 子類繼承父類, 只能繼承父類中非私有的成員(成員變量/成員方法),不能繼承父類的構造方法,但可以通過super()間接訪問
7. 什麼情況下使用繼承?
A類是B類的一種,或者B類是A類的一種,則可以是繼承關係
8. super()關鍵字:表示父類的一個空間標識(簡單記:代表父類的對象)
9. this與super的區別:
a) 位置不同:
i. this.成員變量:訪問本類的成員變量;
ii. super.成員變量:訪問父類的成員變量
b) 成員方法:
i. this.成員方法:本類的成員方法
ii. super.成員方法:父類的成員方法
c) 構造方法:
i. this()/this(“”):訪問當前類的構造方法
ii. super()/super(“”):訪問父類的構造方法
10. 子類繼承父類,會默認訪問父類的無參構造方法,如果父類沒有無參構造,則子類構造方法全部報錯,解決方法:
a) 手動給出父類的無參構造
b) 子類的構造方法(有參或者無參)的第一句話:super(“傳參”),通過父類的有參構造間接訪問
c) 子類的(有參構造)第一句話:this(),間接訪問父類的有參構造.
繼承的相關程序
1.代碼塊的執行順序
class Fu4 {
static {
System.out.println("靜態代碼塊Fu");
}
{
System.out.println("構造代碼塊Fu");
}
public Fu4() {
System.out.println("構造方法Fu");
}
}
class Zi4 extends Fu4 {
static {
System.out.println("靜態代碼塊Zi");
}
{
System.out.println("構造代碼塊Zi");
}
public Zi4() {
System.out.println("構造方法Zi");
}
}
public class ExtendsTest2 {
public static void main(String[] args) {
Zi4 z = new Zi4();
}
}
執行結果:靜態代碼塊Fu
靜態代碼塊Zi
構造代碼塊Fu
構造方法Fu
構造代碼塊Zi
構造方法Zi
2.老師和學生的繼承
package 繼承與面向對象;
/*老師和學生的共同屬性是姓名,年齡(成員變量)
* 賦值方式set()
* 成員方法:我愛Java
* */
class Student{
//私有化成員變量
private String name;
private int age;
//成員變量賦值:set()-get()方式
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//成員方法
public void show(Student s){
System.out.println("姓名:"+s.getName()+",年齡:"+s.getAge());
}
public void show2(){
System.out.println("我愛Java");
}
}
//繼承關係,老師繼承學生
class Teacter extends Student{}
public class StudentTeacter {
public static void main(String[] args) {
//創建對象1
Student s=new Student();
//成員變量賦值
s.setName("A");
s.setAge(20);
//調用成員方法
s.show(s);
s.show2();
//創建對象2
Teacter t=new Teacter();
//成員變量賦值
t.setName("B");
t.setAge(30);
//調用成員方法
t.show(t);
t.show2();
}
}
執行結果:
姓名:A,年齡:20
我愛Java
姓名:B,年齡:30
我愛Java
3.中國四大美女
/*利用static,減少代碼*
*/
class Person{
String name;
int age;
static String country;
//變量輸入姓名,年齡
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
//變量輸入姓名,年齡,國籍
public Person(String name, int age,String country ) {
super();
this.name = name;
this.age = age;
this.country=country;
}
public void show(){
System.out.println("姓名是:"+name+"年齡是:"+age+"國籍是:"+country);
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p1=new Person("西施",23,"中國");
p1.show();
Person p2=new Person("貂蟬",23);
p2.show();
Person p3=new Person("楊貴妃",24);
p3.show();
Person p4=new Person("王昭君",25);
System.out.println("......................");
p1.country="美國";
p1.show();
p2.show();
p3.show();
}
}