学习目标:
提示:封装、继承和相关联关键字的使用
学习内容:
1、 封装
2、 继承
3、 super关键字
4、方法的重写
5、 final和static关键字
1、封装
封装的定义:
将类的某些信息隐藏在类的内部,让外部程序不能直接访问,而是通过访问该类提供的方法对类中隐藏的内容进行操作和访问。
封装的意义:
把尽可能多的东西藏起来,并且对外提供便捷的接口:属性私有化、方法公开化。
封装的原则:
把属性隐藏起来,把逻辑上可以公开的方法进行公开。
2、继承
继承的定义:
发生在类与类之间,被继承的类被称为父类,继承类的类称为子类。
继承的注意事项:
1、一个类只能有一个父类,但是一个父类可以有多个子类。
2、父类的无参构造方法会被子类隐式调用,具体的原因在后面super关键字里面会写,同时子类调用父类无参构造方法的层级不限,一直调用到根类为止。
继承的好处:
提高了代码的复用性(多个类相同的成员可以放到同一个类中);
提高了代码的可维护性(如果方法的代码需要修改,修改一处即可)
继承的弊端:
类与类之间产生了关系,耦合性增强了,当父类发生改变的时候子类也不得不改变,大大降低了子类的独立性。
继承中变量的访问特点:
程序先访问方法内部的局部变量,如果没有则去该类中的成员变量中去找,如果成员变量中也没有的话则去父类的成员变量中去寻找。
3、super关键字
定义:
super代表父类存储空间的标识的引用,但是super关键字不能调用父类的私有方法和属性。
继承中构造方法的访问特点:
子类中的所有的构造方法默认都会访问父类中无参的构造方法。原因是:
①子类会继承父类中的数据,可能还会使用父类中的数据。所以子类初始化之前,一定要完成父类数据的初始化。
②每一个子类构造方法的第一条默认语句都是:super();
如果父类中没有无参构造方法,只有带参构造方法:
①通过使用super关键字去显示的调用父类的带参构造方法
②在父类中自己提供一个无参构造方法
建议用第二种
Public class zi extend fu{
Private String love;
Public zi(){
}
Public zi(String name,int age,String love){
Super(name,age);
This.love=love;
}
}
继承中成员方法的访问特点:
通过子类对象访问一个方法,先从子类成员范围内寻找,没有的话去父类成员范围找,如果没有就报错
Public class zi extend fu{
Public class show(){
Super.show();
Sout();
}
}
4、方法的重写
概述:
子类中出现了和父类一模一样的方法的声明。
重写的应用:
当子类需要父类的功能,而功能主题子类又有自己特定的内容时,可以重写父类中的方法,这样既沿袭了父亲的功能,又定义了子类特有的内容。
方法重写的注意事项:
私有方法不能被重写(父类私有成员子类是不能继承的)
子类方法访问权限不能更低(public>默认>私有)
5、final关键字和static关键字
final修饰局部变量:
Final修饰基本类型变量时final修饰的变量的数据值不能变。
Final修饰引用类型变量时final修饰的变量的数据值可以变,但是地址值是不能发生改变的。
Final student s=new student();
s.age=10;
因为在这里final修饰的是引用的地址值s,但是地址里面的变量的值是可以变的
Final修饰方法:
如果一个类不允许其子类覆盖某个方法(即不允许被子类重写),则可以把这个方法声明为final方法。
Final修饰类:
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
Static关键字:
是静态的意思,可以修饰成员方法,成员变量。
Static修饰的特点:
被类的所有对象共享,这也是我们判断是否使用静态关键字的条件。
Static访问特点:
非静态的成员方法可以访问静态的成员变量、非静态的成员变量、静态的成员方法、非静态的成员方法。
静态的成员方法只能访问静态的成员方法和静态的成员变量。