封装、继承、多态
封装、继承、多态其实并不是很难一句话就能说清。
一、封装: 将东西放入盒子
一句话 封装的目的是为了隐藏实现细节,只暴露必要的接口
生活例子: 你家的电视,你只需要按遥控器上的按钮(开、关、调台),不需要打开后盖去拧电线。电视把内部线路全藏起来了,只留几个按钮给你 ------ 这就是封装。
代码示例为:
csharp
class Student {
private int age;
}// 年龄是私有的,只能通过getter和setter方法来访问
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
外面使用时,需要调用setter方法来设置年龄,而不是直接赋值。例如:
ini
Student s = new Student();
s.setAge(18);
里面的数据是安全的,外面不能直接访问。只有通过getter和setter方法才能访问。也可以对数据进行校验,例如:
csharp
public void setAge(int age) {
if (age < 0 || age > 150) {
System.out.println("年龄不对!");
return;
}
this.age = age;
}
如果输入的年龄不在0-150之间,就会输出"年龄不对!"。
二、继承: 继承盒子里面的东西
一句话: 儿子继承爸爸的东西。
生活例子:你从你生下来就和你爸爸妈妈一样有着一对的眼睛,一头乌黑的头发。等等,不用重新长。不同的你是你可以有与你爸爸不一样的地方。例如可能你比他高,或者你比他轻。你有着他没有的爱好。
代码示例为:
scala
// 父类:人
public class Person {
String name;
int age;
void introduce() {
System.out.println("我叫" + name + ",今年" + age + "岁");
}
}
// 子类:学生,自动拿到 name、age、introduce()
public class Student extends Person {
String studentId; // 学生自己的东西
}
// 子类:老师,同样白拿一份
public class Teacher extends Person {
double salary; // 老师自己的东西
}
子类不用写父类中的属性与方法,可以直接继承使用。
进行调用时,直接调用即可。例如:
ini
Student s = new Student();
s.introduce();
会输出"我叫张三,今年18岁"。
三、多态: 同样一个拿取动作,出现不同的结果
一句话: 同一个动作,不同的对象,会有不同的结果。
生活例子: 同样是播放按钮,在视频软件中播放的是视频,而在音乐软件中播放的是音乐。
接着上面的代码,代码示例为:
scala
public class Student extends Person {
@Override
void introduce() {
System.out.println("我是学生" + name);
}
}
public class Teacher extends Person {
@Override
void introduce() {
System.out.println("我是老师" + name);
}
}
然后写一个方法让他跟人打招呼。
scss
public static void sayHello(Person p) {
p.introduce(); // 传进来的是谁,就用谁的介绍方式
}
public static void main(String[] args) {
Student s = new Student();
Teacher t = new Teacher();
sayHello(s); // 我是学生张三
sayHello(t); // 我是老师李四
}
都是同样的sayHello方法,但是对象不同,结果也不同。
四、扩展:修饰符
private:私有的,只能在本类中访问。 public:公有的,可以在任何地方访问。 protected:受保护的,可以在本类、子类、同包类中访问。 default:默认的,只能在本类、同包类中访问。
使用原则
- 成员变量:尽量用
private,提供 getter/setter 封装 - 工具方法:
private - 给子类扩展的方法:
protected - 对外暴露 API:
public - 仅同包使用:default
五、总结:最直白最不饶弯子
封装:将数据隐藏起来,只暴露必要的接口。
继承:子类继承父类的东西。
多态:同一个动作,不同的对象,产生不同的结果。