1.1继承的概述
1.1.1继承概述
- 多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需在定义这些属性和行为,只要继承那个类即可
- 单独的这个类称为父类,基类或者叫超类,多个类可以称为子类或者派生类
- 有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员
1.1.2实现继承的方式
通过extends关键字可以实现类与类的继承
格式:
- public class 子类名 extends 父类名{}
1.1.3案例代码
package com.itheima_02;
/*
* 标准人类
*
* 继承的格式:
* public class 子类名 extends 父类名 {}
*
* 继承的好处:
* A:提高了代码的复用性
* B:提高了代码的维护性
* C:让类与类之间产生了关系,是多态的前提
*
* 继承的弊端:
* 让类与类之间产生了关系,也就让类的耦合性增强了。
*
* 开发原则:高内聚,低耦合。
* 内聚:就是自己完成某件事情的能力
* 耦合:类与类的关系
*/
public class Person {
private String name;
private int age;
public Person() {}
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;
}
}
package com.itheima_02;
public class Student extends Person {
public void study() {
System.out.println("学生要好好学习");
}
}
package com.itheima_02;
public class Teacher extends Person {
public void teach() {
System.out.println("老师要好好讲课");
}
}
1.2继承的好处和弊端
1.2.1继承的好处
-
提高了代码的复用性
- 多个类相同的成员可以放到同一个类中
-
提高了代码的维护性
- 如果功能的代码需要修改,修改一处即可
让类与类之间产生了关系,是多态的前提
1.2.2继承的弊端
-
好处的第三点同时也是继承的弊端
- 类与类之间产生了关系,让类的耦合性增强了
- 设计原则:高内聚低耦合
1.2.3 示例代码
package com.itheima_02;
/*
* 标准人类
*
* 继承的格式:
* public class 子类名 extends 父类名 {}
*
* 继承的好处:
* A:提高了代码的复用性
* B:提高了代码的维护性
* C:让类与类之间产生了关系,是多态的前提
*
* 继承的弊端:
* 让类与类之间产生了关系,也就让类的耦合性增强了。
*
* 开发原则:高内聚,低耦合。
* 内聚:就是自己完成某件事情的能力
* 耦合:类与类的关系
*/
public class Person {
private String name;
private int age;
public Person() {}
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;
}
}
1.3 Java 中继承的特点
1.3.1 Java 中单继承以及多级继承
- Java中只支持单继承,不支持多继承
- 一个类只能有一个父类,不可以有多个父类
- public class Son extends Father{} // ok
- public class Son extends Father,GrandFather // Error
- Java中类支持多层继承(继承体系)
- Public class GrandFather{}
- Public class Father extends GrandFather{}
- Public class Son extends Father{}
1.3.2示例代码
package com.itheima_03;
public class Father extends GrandFather {
public void fatherSay() {
System.out.println("爸爸都是从儿子走过来的");
}
}
package com.itheima_03;
public class GrandFather {
public void grandFatherSay() {
System.out.println("爷爷都是从孙子熬过来的");
}
}
package com.itheima_03;
/*
public class Son extends GrandFather {
public static void main(String[] args) {
Son s = new Son();
s.grandFatherSay();
}
}
*/
/*
public class Son extends Father {
public static void main(String[] args) {
Son s = new Son();
s.fatherSay();
}
}
*/
//Java中类只支持单继承,不支持多继承
/*
public class Son extends Father,GrandFather {
public static void main(String[] args) {
Son s = new Son();
s.fatherSay();
}
}
*/
//Java中类支持多层继承
public class Son extends Father {
public static void main(String[] args) {
Son s = new Son();
s.fatherSay();
s.grandFatherSay();
}
}
1.4 Java继承中成员变量的特点
1.4.1Java 继承中成员变量的特点
- 成员变量名称不一样,使用的时候非常简单
- 成员变量名称一样的情况:
- 在子类中访问变量:(就近原则)
- 在方法的局部范围找,如果有就使用
- 在子类的成员范围找,如果有就使用
- 在父类的成员范围找,如果有就使用
- 如果还找不到 就报错
- 在子类中访问变量:(就近原则)
1.4.2示例代码
package com.itheima_01;
public class Father {
//为了演示案例的方便,这里我们使用public修饰了成员变量,实际开发中,用的是private
//年龄
public int age = 45;
}
package com.itheima_01;
/*
* Java继承中成员变量的特点:
* A:成员变量名称不一样,使用的时候非常简单。
* B:成员变量名称一样的情况
* 在子类方法中访问变量:
* a:在方法的局部范围找,如果有就使用
* b:在子类的成员范围找,如果有就使用
* c:在父类的成员范围找,如果有就使用
* d:如果还找不到,就报错
* 就近原则。
*/
public class Son extends Father {
//身高
public int height = 170;
//年龄
public int age = 20;
public void show() {
System.out.println(height);
System.out.println(age);
}
public void printAge() {
int age = 10;
System.out.println(age);
}
}
package com.itheima_01;
public class ExtendsTest {
public static void main(String[] args) {
Son s = new Son();
//s.show();
s.printAge();
}
}