一、封装(Encapsulation)
背景:对象的实例变量能被随意的调用,例:student.score = 98;可视为远程控制修改student的实例变量;如果有人设置为student.score = 0;会造成严重的后果;
Solution:对所有的实例变量创建Setter方法,强制调用程序必须调用Setter方法对实例变量进行存取。
private int score;
public void setScore(int chineseScore){
if (chineseScore < 60){
score = chineseScore;
}
}
基本原则:将实例变量标记为私有(private),提供公有(public)的Getter和Setter方法进行存取。
二、继承(Extends)
定义:设计继承时,我们会把共同的程序代码放到一个类中,“子类继承父类”:意味着子类继承了父类的属性和方法。子类可以加入自己的方法和实例变量,当子类定义的方法与父类的方法出现重名,则覆盖。
注:1、子类会继承父类public类型的实例变量和方法,private类型的不继承。
2、如果不想某个方法被覆盖,该方法用final修饰。
public class Phone {
String shape;
void takePhoto(){
//.....
}
}
public class HuaweiPhone extends Phone{
int price = 1000;
void takePhoto(){
//...卡咔咔咔
}
void faceRecognition(){
//人脸识别
}
}
判断:使用IS-A进行测试,例:三角形是一个多边形(正确),外科医生是一个医生(正确),澡盆是一个浴室(错误)。
意义:继承可以确保某个父类下的所有类都会具有父类持有的方法和实例变量。通过继承来定义相关类间的共同协议。
三、多态
前置:先看一般声明和引用的方法。
Dog dog = new Dog();
1、声明一个引用变量:Dog dog
2、创建对象:new Dog()
3、引用和对象进行连接:=
注:引用类型和对象的类型相符。
引用类型可以是实际对象类型的父类:
Animal dog = new Dog();
参数和返回类型也支持多态:
public class TestPhone {
public void testMakePhoto(Phone a){
a.takePhoto();
}
}
class TestRes{
public void test(){
TestPhone tP = new TestPhone();
XiaomiPhone xiaomiPhone = new XiaomiPhone();
ApplePhone applePhone = new ApplePhone();
tP.testMakePhoto(xiaomiPhone);
tP.testMakePhoto(applePhone);
}
}