概述
封装: 对象代表什么, 就得封装对应的数据, 并提供数据对应的行为. 利用封装, 就可以把一些零散的数据和一些行为封装为一个整体, 这个整体就是对象.
假设现在要在方法当中打印学生的信息, 如果没有封装, 那么就要把这些零散的数据全部单独地传递给方法, 那么方法就要写很多很多的参数. 但是有了封装之后, 就可以将这些参数作为一个整体, 即对象传递给方法.
但是当这样的 Javabean 类越来越多之后, 问题就会出现了. 假设现在又有了第二个 Javabean 类去描述老师, 老师和学生这两个 Javabean 类有大量重复的代码. 于是可以将两个 Javabean 类中相同的代码全部抽取出来放到另一个位置, 这两个 Javabean 类共同取用这个位置的代码.
Java 中提供了一个关键字 extends,利用这个关键字,就可以让一个类和另一个类建立起继承关系。例如:
public class Student extends Person{}
Student 称为子类或派生类,Person 称为父类或基类、超类。
子类自动获得父类功能。
子类可以覆盖父类中的方法。覆盖的意思是子类重新定义继承下来的方法,以改变或延伸此方法的行为。
使用继承的好处:
-
可以把多个子类中重复的代码抽取到父类中,提高了代码的复用性。
-
子类可以在父类的基础上,增加其他的功能,使子类更强大。
关于继承最主要的需要学会的内容:
-
自己设计一个继承结构并将代码写出来。
-
学会使用别人已经写好的继承结构。
-
子类可以从父类中继承哪些内容?
-
继承中,成员变量的访问特点。
-
继承中,成员方法的访问特点。
-
继承中,构造方法的访问特点。
-
This 和 super 的使用方法。
什么时候使用继承: 当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码。
继承的特点:Java 中只支持单继承,不支持多继承,单支持多层继承。
单继承:一个子类只能继承一个父类。
不支持多继承:子类不能同时继承多个父类。
多层继承:子类 A 继承父类 B,父类 B 可以继承自父类 C。C 是 A 的间接父类,B 是 A 的直接父类。
Java 中有一个最大的祖类,叫做 Object。这个类是 Java 提前写好的,每一个类都直接或间接继承自 Object。如果写了一个类,没有指定其继承自哪个类,就默认其直接继承自 Object 类。这是在虚拟机运行的时候自动帮我们加上去的, 如果当前类有父类, 那虚拟机不做其他操作, 如果当前类没有指定父类, 则虚拟机会自动增加一个 Object 类作为当前类的父类。
指定了父类的类间接继承自 Object 类。
当 Java 的类写得越来越多时,就形成了一个继承体系。在继承体系最上面的类就默认是继承自 Object 类,下面的所有的类都是间接地继承自 Object。在继承体系中,任何一个子类,既可以使用直接父类里面的内容,也可以使用间接父类里面的内容,但是不能使用类似于叔叔类的内容。
子类只能访问父类中非私有的成员, 即不是用 private 修饰的内容.
练习:
继承的练习(自己设计一个继承体系)
现在有四种动物:布偶猫、中国狸花猫、哈士奇、泰迪。
暂时不考虑属性,只要考虑行为。
请按照继承的思想特点进行继承体系的设计。
四种动物分别有以下的行为:
布偶猫:吃饭、喝水、抓老鼠
中国狸花猫:吃饭、喝水、抓老鼠
哈士奇:吃饭、喝水、看家、拆家
泰迪:吃饭、喝水、看家、蹭一蹭
思路:
采用画图法,从下往上画图,下面是子类,上面是父类,将子类中的共性内容抽取到父类中。
书写代码要从上往下写。
Javabean 类:
public class Animal {
public void eat() {
System.out.println("吃饭");
}
public void drink() {
System.out.println("看家");
}
}
Javabean 类:
public class Cat extends Animal {
public void catchRat() {
System.out.println("猫抓老鼠");
}
}
Javabean 类:
public class Dog extends Animal {
public void watchDoor() {
System.out.println("狗在看家");
}
}
Javabean 类:
public class RollCat extends Cat {
}
Javabean 类:
public class LiHua extends Cat {
}
Javabean 类:
public class Husky extends Dog {
public void destroyHome() {
System.out.println("哈士奇在拆家");
}
}
Javabean 类:
public class Teddy extends Dog {
public void touch() {
System.out.println("泰迪在蹭一蹭");
}
}
测试类:
public class Test {
public static void main(String[] args) {
Husky h = new Husky();
h.destroyHome();
h.watchDoor();
Teddy t=new Teddy();
t.touch();
LiHua lihua=new LiHua();
lihua.catchRat();
}
}
执行结果:
哈士奇在拆家
狗在看家
泰迪在蹭一蹭
猫抓老鼠
标签:继承,子类,class,父类,public,Javabean
From: https://www.cnblogs.com/Chengkai730/p/18402655