- package practice;
- /**
- * 面向对象之继承
- *
- * 继承: 1.提高了代码的复用性。
- * 2.让类与类之间产生了关系。有了这个关系,才有了多态的特性。
- *
- * Tips:不要为了获取其他类的功能,简化代码而继承,
- * 必须是类与类之间有所属关系才可以继承。
- *
- * 重点: 1.在Java语言中,只支持单继承,不支持多继承,因为多继承容易带来安全隐患,
- * 就是当父类中定义了相同功能,当功能内容不同时,子类对象不确定要运行哪一个。
- * 但是Java保留了这种机制,并用另一种体现形式来完成表示,叫做多实现。
- * 2.Java支持多层继承。
- * 3.如何使用一个继承体系中的功能:先查阅父类体系的描述,因为父类中定义的是该体系的共性功能。
- * 通过了解共性功能,就可知该体系的基本功能。在具体调用时,要创建最子类的对象(父类不能创建对象;
- * 创建子类对象可以实现更多的功能)。
- *
- * 代码体现:
- * 子父类出现后,类成员的特点:
- * 1.变量:如果子类中出现了非私有同名变量时,
- * 子类访问本类中的对象时用this,子类对象访问父类对象用super。
- * (super的使用与this几乎一致,this本类对象引用,super父类对象的引用)
- * 2.函数:当子类出现和父类一模一样的函数时,子类调用该函数,会执行子类函数的内容。
- * 这种情况是函数的另一个特性:重写(覆盖)。
- * 覆盖注意事项:
- * (1).子类覆盖父类,必须保证子类的权限大于等于父类权限,才可以覆盖,否则编译失败。
- * (2).静态只能覆盖静态。
- * (3).与重载的区别:重载只看函数的参数列表;重写子类父类的方法一模一样。
- * 3.构造函数
- * 在对子类对象进行初始化时,父类函数也会运行,因为子类的构造函数中第一行有一条隐示的语句super();
- * super();会访问父类中空参数的构造函数。
- * Q:为什么子类一定要访问父类的构造函数
- * A:因为父类中的数据子类可以直接获取,子类对象在建立时,需要先查看父类是如何对这些数据初始化的。
- *
- * 例子:定义学生类和工人类,将学生和工人的共性提取出来,单独进行描述。
- * 共性:name、age
- *
- * @author Qihuan
- *
- */
- //定义一个person类
- class Person {
- private String name;
- private int age;
- void speak(){
- System.out.println("hello");
- }
- 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;
- }
- }
- //学生类
- class Student extends Person {
- void study() {
- System.out.println("Student:"+"\n"+"Name: "+getName()+"\n"+"Age:"+getAge());
- }
- void speak(){
- super.speak();
- System.out.println("study");//重写
- }
- }
- //工人类
- class Worker extends Person {
- void work() {
- System.out.println("Worker");
- }
- }
- public class ExtendsPractice {
- public static void main(String[] args) {
- Student stu = new Student();
- stu.setAge(20);
- stu.setName("LiMing");
- stu.study();
- stu.speak();
- }
- }
复制代码 |
|