第八章
1.包
1.1作用
区分相同名字的类
更好地管理类
控制访问范围
package com.zcw
1.2本质
创建不同的文件夹来保存类文件
1.3命名
常用的包
1.4注意和细节
Arrays.sort(传入数组)
package的作用是声明当前类所在的包。需放在类的最上面,一个类最多只有一句package
import指令放在package的下面,在类定义前面,没有顺序要求
2.访问修饰符
2.1具体内容
JAVA提供四种访问控制修饰符,用于控制方法和属性的访问范围
? public protected default(默认的没有写) private
2.2注意事项
修饰符可以用来修饰类中的属性,成员方法及类
只有默认和public才能修饰类,并且遵循上述规则
成员方法的访问规则和属性完全一样
3.封装
1.1概述
把抽象出来的属性和方法封装在一起,数据被保护在内部,程序其他部分只有通过被授权的方法,才能对数据进行操作
1.2好处
隐藏实现细节
可以对数据进行验证,保证合理安全
1.3实现步骤
4.继承
4.1概述
当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类定义这些属性和方法,子类通过关键字 extends 来声明继承父类即可
class Son extends Father{
}
4.2好处
提高了代码的复用性
提高了代码的扩展性和可维护性
4.3细节
1.父类的私有(private)属性和方法不能在子类直接访问,要通过公共的方法去访问
private String name; //父类定义一个私有属性姓名
public String getName() {
return name; //定义一个访问 name 的公共方法
}
a.getName(); //子类要通过调用公共方法才能访问 name
2.当创建子类对象,不论子类用的哪个构造器,默认情况下先调用父类的无参构造器,完成父类的初始化
public Son() {
super();
sout("这是子类的无参构造器")
}
public Father() {
sout("这是父类的无参构造器")
}
Son son = new Son();
3.如果父类没有无参构造器,要在子类构造器中用 ==super();==去指定使用父类的哪个带参构造器完成对父类的初始化工作,不然会报错
public Son(String name) {
super("zcw");
①sout("这是子类的带参构造器")
}
public Father(String name) {
②sout("这是父类的带参构造器")
}
Son son = new Son(name);
输出结果则是①②
- super只能在构造器使用,且必须放在构造器的第一行,不然会报错,先有爸,再有儿子
- super() 和 this() 都只能放在构造器的第一行,两个方法不能放在同一个构造器(好好理解)
- java所有类都是Object的子类
- 父类构造器的调用不限于直接父类,一直往上追溯到object类
- 子类最多只能继承一个父类,java是单继承机制
- 不能滥用继承,子类和父类必须满足 is-a 的关系
5.super关键字
5.1概述
super代表父类的引用,用于访问父类的属性、方法、构造器
super.属性名;
super.方法名();
super(参数列表);
1.super能访问父类的属性,但不能访问父类的私有属性
2.super能访问父类的方法,但不能访问父类的私有方法
3.访问父类的构造器,只能放在构造器的第一句,只能出现一次
? 找方法(super.cal())的顺序是直接查找父类,其他规则一样
5.2好处
1.调用父类构造器的好处,分工明确,父类属性由父类初始化,子类属性由子类初始化
2.当子类中有和父类成员重名时,为访问父类成员必须通过super。如果没有重名,则效果一样
3.super的访问不限于直接父类,如果爷爷类和本类有同名方法也可以使用super,使用super遵循就近原则
son{ String name;
father{ String name;
granapa{ String name;
super.name
6.方法重写(override)
6.1概述
方法重写就是子类有一个方法和父类的某个方法名称、返回值类型、参数一样
calss Animal{
public void cry() {
sout("动物叫唤")
}
}
calss Dog extends Animal{
public void cry() {
sout("小狗汪汪叫")
}
}
6.2细节
1.子类的方法要和父类的方法名称、返回值类型、参数完全一样
2.子类方法的返回值类型和父类方法返回值类型一样,或者是父类返回类型的子类,但是不能不一样
public Object getInfo() { }
public String getInfo() { }
3.子类方法不能缩小父类方法的访问权限,但能扩大
pubilc void sayOk() { }
protect void sayOk() { }
方法重载和方法重写比较
g是Object的子类,构成方法重载
3.子类方法不能缩小父类方法的访问权限,但能扩大
```java
pubilc void sayOk() { } //子类方法,两者构成方法重写,但不能写成 default
protect void sayOk() { } //父类方法
方法重载和方法重写比较
|