目录
什么是继承
继承关系图
idea如何生成继承类图
继承优缺点
什么情况下使用继承模式呢?
继承中变量的访问特点
什么是继承
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义、追加属性和方法
继承的格式:
public class 子类名 extends 父类名{}
父类:也称基类、超类
子类:也称派生类
范例:public class Student extends Parent{}
Student.java
package com.面向对象.Demo5;
public class Student {
// Student 学生类
private String userName;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Teacher.java
package com.面向对象.Demo5;
public class Teacher {
// Teacher 老师类
private String userName;
private int age;
public void work(){
System.out.println("我是一名老师,教书育人");
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
可以看到上面的Student类与Teacher类代码相同,冗余,所以可以将相同的属性,抽取到一个单独的类Parent类,后面Student与Teacher类中需要这些属性和方法,可以extends Parent类。
改变后代码如下:
Student.java
package com.面向对象.Demo5;
public class Student extends Parent {
// Student 学生类
public void workStudent() {
System.out.println("我是学生 我在敲代码...");
}
public Student() {
}
}
Teacher.java
package com.面向对象.Demo5;
public class Teacher extends Parent {
// Teacher 老师类
public void workTeacher(){
System.out.println("我是一名老师,教书育人");
}
}
Parent.java
package com.面向对象.Demo5;
public class Parent {
/**
* 什么是继承
* 我们可以将每个类中相同的成员属性和方法 抽取到一个单独的类
* 该类就是父类
*/
private String userName;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Demo1.java
package com.面向对象.Demo5;
public class Demo1 {
public static void main(String[] args) {
Teacher t = new Teacher();
t.setUserName("mayuikt");
t.setAge(24);
System.out.println(t.getUserName() + "-" + t.getAge()); // mayuikt-24
t.workTeacher(); // 我是一名老师,教书育人
Student s = new Student();
s.setUserName("xiaojun");
s.setAge(21);
System.out.println(s.getUserName() + "-" + s.getAge()); // xiaojun-21
s.workStudent(); // 我是学生 我在敲代码...
}
}
继承关系图
idea如何生成继承类图
什么是类图?
Student 学生类 继承了我们 哪些类 Parent 有哪些成员属性方法
在类中 右键,选择Diagrams
选择第一个可以看到完整的类图,选择第二个就只能看到该类继承那个类
选择第一个如下:
继承优缺点
好处:
- 提高了代码的复用性(多个类相同的成员属性和方法可以放到一个类中)
- 提高了代码的维护性(如果方法的代码需要修改,只需要修改一处即可)
弊端:
继承让类与类之间产生了关系,类的耦合性也增加了,当父类发生变化时,子类也不得不跟着变化,消弱了子类的独立性。
什么情况下使用继承模式呢?
- 多个类中 存在相同的成员属性或者方法 为了消除代码的冗余,使用继承模式 将每个子类 相同代码 直接抽取出来存放在父类中。
假设法:我有两个类A和B,如果满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑使用继承,否则不能滥用继承。
例如:苹果和水果、猫和动物
继承中变量的访问特点
在子类方法中访问一个变量:
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 如果都没有 则报错
- 即遵循就近原则
Student.java
package com.面向对象.Demo6;
public class Student extends Parent{
public String name = "xiaojun";
public int age = 21;
public void show(){
int age = 18; // 此处如果注释,就会去找21,如果18与21到注释了,就会去找父类的24,即遵循就近原则
System.out.println("学生的年龄age:"+age+"学生的身高:"+height);
}
}
Parent.java
package com.面向对象.Demo6;
public class Parent {
public int height = 175;
public int age = 24;
}
Demo.java
package com.面向对象.Demo6;
public class Demo {
public static void main(String[] args) {
// new Student(); //new 出 Student()后,使用快捷键 Alt+回车,然后再按回车就可 补全对象类型与对象名称
Student student = new Student();
student.show(); // 学生的年龄age:18学生的身高:175
}
}
下一篇文章:super 关键字用法