理解Java三大特性之继承

继承

继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
类的继承格式:通过extends关键字可以实现类与类的继承。
class 子类名 extends 父类名 {}
单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。
案例
在这里用老师和学生来表述继承。
设Person为父类

public class Person {
    String name;
    int age;

    public void eat() {
        System.out.println("吃饭");
    }

    public void sleep() {
        System.out.println("睡觉");
    }
}

Teacher和Student为子类

public class Teacher extends Person{

    public void teache(){
        System.out.println("教书");
    }
}

public class Student extends Person{

    public void talkLove(){
        System.out.println("谈恋爱");
    }
}

测试类

public class MyTest {
    public static void main(String[] args) {
        Student student = new Student();
        student.name="张三";
        student.age=19;
        System.out.println(student.name+"==="+student.age);
        student.sleep();
        student.eat();
        student.talkLove();
        System.out.println("-----------------");
        Teacher teacher = new Teacher();
        teacher.name="沈老师";
        teacher.age=10;
        System.out.println(teacher.name+"==="+teacher.age);
        teacher.sleep();
        teacher.eat();
        teacher.teache();

    }
}

使用继承后,这个Person类就可以作为一个父类,然后Teacher类和Student类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性(复用性主要是可以多次使用,不用再多次写同样的代码)。
然而继承也有弊端那就是类的耦合性增强了。在开发过程我们要保持证高内聚和低耦合。
内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。
耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。
目的:使得模块的“可重用性”、“移植性”大大增强
通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低

需要注意的是 Java 不支持多继承,但支持多重继承。
理解Java三大特性之继承
继承的注意事项
子类只能继承父类所有非私有的成员(成员方法和成员变量)。
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
不要为了部分功能而去继承。

this和super的区别和应用

1.this关键字
(1.)每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象;当在方法中使用本类属性时,都会隐含地使用this关键字,当然也可以明确使用。
(2.)为了区分属性和局部变量,可以通过this关键字来调用。
(3.)this关键字的用法
当类中非静态方法的参数名与类的某个成员变量名相同时,为了避免参数作用范围覆盖了成员变量的作用范围,必须明确使用this关键字来指定。
如果某个构造方法的第一条语句具有形式this(…),那么这个构造方法将调用本类中的其他构造方法。
如果某个方法需要传入当前对象,则可以将当前的对象作为参数传递给它。
2.super关键字
super代表了父类空间的引用
(1.)super的作用:
子父类存在着同名的成员时,在子类中默认时访问子类的成员,可以通过super关键字指定访问父类的成员
创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法
(2.)super的用法
super可以用来引用直接父类的实例变量。
super可以用来调用直接父类方法。
super()可以用于调用直接父类构造函数。
this和super的区别
this 代表的是本类对象的引用
super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
this和super的使用
a:调用成员变量
this.成员变量 调用本类的成员变量
super.成员变量 调用父类的成员变量
b:调用构造方法
this(…) 调用本类的构造方法
super(…) 调用父类的构造方法
c:调用成员方法
this.成员方法 调用本类的成员方法
super.成员方法 调用父类的成员方法

方法重写

在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。
子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。
super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。
如果要使用super关键字不一定非要在方法重写之后使用,也可以明确地表示某个方法是从父类中继承而来的。使用super只是更加明确的说,要从父类中查找,就不在子类查找了。
方法重写注意事项
父类中私有方法不能被重写因为父类私有方法子类根本就无法继承。
子类重写父类方法时,访问权限不能更低,最好就一致。
父类静态方法,子类也必须通过静态方法进行重写。
final关键字
final关键字是最终的意思,可以修饰类,变量,成员方法。
final修饰特点
修饰类: 被修饰类不能被继承。
修饰方法: 被修饰的方法不能被重写。
修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量。