携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
java语言的三大特性:封装、继承、多态
封装
封装我简单的理解成隐藏信息,即将类的属性隐藏起来,变为类私有的,将类的属性私有化,再提供公有的public的方法访问和操作类的属性,此过程我理解为封装,如以下代码:
public class User {
private String account;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
}
在此创建一个User类,定义一个account用户的账户属性,此时将account属性添加private变为私有,添加private后外部就访问不了User的account属性,要想访问和操作account就得在类的内部添加公有方法,如上通过公有方法getAccount和setAccount来获取对象的account值和改变account值,此外也可以在公有方法中实现更复杂一点的逻辑,此处只做封装的简单演示。
封装的好处:
- 隐藏实现的细节,可以将不想让外部看到的信息隐藏起来,外部只能看到公共的方法,而看不到具体的属性实现细节等等
- 实现一对一,功能方向明确,一个功能只为这个功能服务,避免了代码逻辑都在一块,一团糟
- 可减少耦合
继承
一个类继承另一个类,继承的为子类,被继承的为父类,继承可以实现代码的复用,如以下代码:
public class BusinessException extends PenkException {
public BusinessException(RetCodeEnum retCodeEnum, String message, Errors data) {
super(retCodeEnum, message, data);
}
}
public abstract class PenkException extends RuntimeException {
private final Integer code;
private final String message;
private final transient Object errors;
protected PenkException(RetCodeEnum retCodeEnum, String message, Object errors) {
this.code = retCodeEnum.getCode();
this.message = message;
this.errors = errors;
}
}
此处的BusinessException继承PenkException类,子类BusinessException集成了父类中的属性code、message、errors,然而构造器不能被继承,所以子类BusinessException得定义自己的构造方法,在构造方法中用super调用父类的构造方法逻辑
注意点:
- 子类继承父类中所有非私有的属性和方法
- 子类只能继承一个父类
- 构造器不能被继承
多态
多态是以封装和继承为基础。多态就是同一个接口,使用不同的实例而执行不同操作,具体示例如下:
class Father {
private int age = 40;
public int getAge() {
return age;
}
public void say() {
System.out.println("I'm father");
}
}
class Son extends Father{
private int age = 16;
@Override
public void say() {
System.out.println("I'm son");
}
public void play() {}
}
public class Main{
public static void main(String[] args) {
Father father = new Son();
System.out.println(father.getAge()); // 输出40
father.say(); // 输出I'm son
// father.play() // 无法完成编译
}
}