3.1 封装
将方法写在类中,称为封装;无论多少个对象都可以重复用该方法;
封装为私有数据private
3.1.1封装的目的
隐藏对象细节,将对象当做黑箱操作;用户必须通过提供的方法调用来操作对象
3.1.2Java命名习惯中
方法名称首字母是小写的
变量首字母是小写的
类名首字符是大写的
3.1.3权限
没有任何定义权限关键字时,就是包权限
若想在其他包的类中使用,需要用public声明,表明它是一个公开类
3.2构造函数
3.2.1定义
构造函数是与类同名称的函数,无返回类型值
若没有写任何构造函数,编译时会自动加入默认构造函数(里面什么都没有)
3.2.2方法重载
可以定义多个构造函数,只要方法的参数类型或个数不一样,称为重载构造函数
注意:返回值类型,不能作为方法重载依据
3.2.3关键字
1、 final关键字
- 如果局部变量声明了final, 则之后不能改变其值
- final class 最后的类,不能再被继承
- final 定义方法, 最后一次定义方法,即子类不能重新定义final方法
2、static关键字
- static声明的成员,不会让个别对象拥有,而是属于类
- 将类作为名称空间,即可以通过类名称与“.”运算来存取的
- static成员中不能使用this,static方法和区块中,也不能调用非static方法或区块
- static方法或区块中,可以使用static数据成员或方法成员
3.3继承
定义:基本上就是避免多个类间重复定义共同行为
重复再设计上就是不好的信号
重新定义(override):继承父类,定义和父类中相同的方法部署,但执行内容不同
public class Magician extends Role{
public void fight() {
System.out.println(“魔法攻击”);
}
public void cure() {
System.out.println(“魔法治疗”);
}
}
public class SwordMan extends Role{
public void fight() {
System.out.println(“挥剑攻击”);
}
}
操作接口相同,只是操作方法的内容不同,可以将fight提升至Role类中的定义
public class Role {
...
public void fight() {
//子类要重新定义fight()的实际行为
}
}
3.4 多态
3.4.1 目的
使用单一接口操作多种类型的对象
3.4.2 多态与is-a
右边是不是左边的一种
Magician magician = new Magician();
Role role1= new Magician(); //可以通过编译
Magician magician = new Role(); //不能通过编译
3.5抽象方法和抽象类abstract
public abstract class Role {
...
public abstract void fight();
}
关键字 | 权限 |
---|---|
public | 都可以 |
protected | 包内类可以,其他包的继承子类可存取 |
private | 只有类内部可以 |
其他包不可以 |
建议:如果定义了有参数的构造函数,也可以加入无参构造函数