面向对象三大特性:封装、继承、多态
1.面向对象的特征二:
继承性:一个类可以使用别的类的成员属性和方法,这就是继承关系
A: 为什么要设计继承性:为了多个类的共有部分一体化为父类,直接调用,更方便修改
B:通过“class A extends B”类实现类的继承。
子类:A 父类(或基类 SuperClass):B
**(对于父类的私有成员属性,子类获取到了,但是没有权限直接调用)**
C:子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
明确:当父类中有私有的(private)属性或方法时,子类同样可以获取到,只是由于封装性的设计,使得子类不可以直接调用。
继承的好处:子类除了通过继承,获取父类的属性和方法之外,还可以定义自己的特有的属性和方法。
关键字extends:子类是对父类功能的“扩展”,但是!!!子类不是父类的子集
**:但是!不能为了获取某个类的功能就随意继承某个类,必须有is a的关系才可以继承
D:java中继承的特点:java中类的继承性只支持单继承:只能继承一个父类,但是父类可以有多个子类
E:子类和父类是相对的概念:
子类1也可以被子类2作为父类被继承:子类2同时拥有子类1和父类的属性、方法。
继承的优点:
A:提高了代码的安全性
B:提高了代码的可维护性
继承的缺点:
A:类的耦合性增强了
B:开发的原则:高内聚低耦合
内聚:就是自己完成某件事的能力
耦合:类与类的关系
2.方法的重写(override)或覆写(overwrite)
A:使用环境:有子类继承父类
B:子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写、覆盖、覆写
C:重写的规则:
a:要求子类方法的 “返回值类型 方法名(参数列表)”与父类的方法一样
b:子类方法的修饰符不能小于父类方法的修饰符(public > default(默认,一般不写) > protected > private)
**:如果父类的一个方法定义成private,子类则不可以重写!因为private只能当前类(父类)使用,子类中的方法相当于重新定义的一个
c:**若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的
d:**子父类的方法必须同为static或同为非static
若方法同为static,那么对象是父类(子类)类型就会执行父类(子类)的方法
若方法同为非static,那么对象是父类(子类)的实例对象就会执行父类(子类)的方法
3.访问权限修饰符
修饰符 类内部 同一个包 子类 任何地方
private yes
default yes yes
protected yes yes yes
public yes yes yes yes
对于class的权限修饰只可以使用public和default,类中成员属性可以用protected和private
*:public类可以在任意地方被访问
*:default类只可以被同一个包内部的类访问
4.super关键字:
A:在Java类中使用super来调用父类中的制定操作:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造器
B:当子父类出现同名成员时,调用时可以用super进行区分
super.属性名(表示父类的)
this.属性名(表示当前类(子类)的)
a:super的追溯不仅限于直接父类
b:super和this的用法相似,this代表本来对象的引用,super代表父类的内存空间的标识
C:当子类重写父类的方法后,在子类中若想再显式(作为代码编写出来)的调用父类被重写的方法,就需要用“super.方法名”
D:super修饰构造器:
a:通过在子类中使用“super(形参列表)”来显式的调用父类中指定的构造器
*:在构造器内部,“super(形参列表)”必须要在首行!
*:在构造器内部,“this(形参列表)”或“super(形参列表)”只能出现一个
*:当构造器中,不显式(不作为代码编写出来)的调用“this(形参列表)”或“super(形参列表)”,则默认调用的父类中空参的构造器
5.子类对象实例化全过程:
/*
* 子类实例化全过程
*/
class Creature{ //第六个执行,这个上面还有一个系统默认的Object父类
public Creature(){ //第五个执行
System.out.println("Creature无参数的构造器"); //第一个显示
}
}
class Animal extends Creature{
public Animal(String name){ //第四个执行
System.out.println("Animal带一个参数的构造器,该动物的name为"+name); //第二个显示
}
public Animal(String name, int age){ //第三个执行
this(name);
System.out.println("Animal带两个参数的构造器,其age为"+age); //第三个显示
}
}
public class Wolf extends Animal{
public Wolf(){ //第二个执行
super("灰太狼", 3);
System.out.println("Wolf无参数的构造器"); //第四个显示
}
public static void main(String[] args) {
new Wolf(); //第一个执行
}
}
6.匿名对象:没有名字的对象,没有引用变量的对象
格式:new 构造方法; //new Student();
应用场景:当方法只调用一次的时候就可以使用匿名对象调用方法
可以当做参数进行传递,但是无法在传参之前做其他事情
注意:匿名对象可以调用成员变量并赋值,但是赋值并没有意义
7.final修饰符:可以修饰类,成员方法和成员变量
final修饰的类:不能被继承,不能有子类
final修饰的方法:不能被重写
final修饰的变量:不可以修改的,是常量(自定义常量)
*:自定义常量“必须”初始化,可以在定义时初始化或赋值初始化
自定义常量命名规则:变量名全部大写,若有多个单词并用下划线“_”链接
|
|