1.封装:
概念:封装就是将方法和属性一起包装到一个单元中,单元以类的形式实现
作用:实现信息隐藏,对属性访问的限制,从而提高程序的可维护性和可复用性。
eg:
实际上我们的真实世界就可以解释封装继承和多态
大家可以看下面的代码:
public class Person {
//属性封装
protected String name;
int age;
protected double tall;
protected double weight;
private boolean makeTools = true;
public Person() {
}
//方法封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getTall() {
return tall;
}
public void setTall(double tall) {
this.tall = tall;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
//对于boolean变量的get方法命名就是这样
public boolean isMakeTools() {
return makeTools;
}
public void setMakeTools(boolean makeTools) {
this.makeTools = makeTools;
}
}
首先,每个人都可以抽象成是一个类,每个人都具有名字,年龄,身高,体重。这样就实现了对人类的这个概念的封装,你可以通过这四个属性去判断一个人(实例化的对象)(当然现实社会是要看你身份证号)。
- 如果你的体重不想被外人知道,就可以在类中不设置对应的get方法,这样就实现了信息隐藏
- 假如说在之后的维护中,weight这个属性值不再需要了,那么只要修改对应的get方法和set方法就可以,这样就提高了代码的可维护性。
其实上面所写的Person类就是一个符合JavaBean规范的类
至于更详细的关于JavaBean的介绍,看这个,百度百科给出的解释还是很良心的:
https://baike.baidu.com/item/javaBean/529577?fr=aladdin
2.继承:
概念:从以有的类中派生出其他类,新的类可以沿用这个类的数据属性和行为(当然private是不 可以的),并能扩展新的能力。
关键字:extends
作用:便于扩展,提高代码的复用
eg:
public class Chinese extends Person {
String language;
public Chinese() {
//这样就继承了Person类的无参构造方法
super();
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public void useChopsticks() {
System.out.println("用筷子");
}
//这样就返回了父类中的体重属性值
public double getWeight() {
return super.getWeight();
}
}
这样就可以很容易的看出来
- 中国人还需要一个使用的语言的属性来辨识他们,扩展的功能就是使用筷子。
- 中国人继承了名字,年龄,身高,体重以及相应的get和set方法,但是不能继承makeTools(因为makeTools的修饰符是private)
super关键字:
1) super代表的是父类对象的引用
2) 当父子类的成员出现同名时,通过super关键字来区分
3) 子类的构造方法中,通过super关键字调用父类的构造方法
4) 当构造一个子类对象的时候一定会先调用父类的构造方法来构造父类的对象。调用父类构造方法的语句必须是子类构造方法中的第一条指令
3.多态:
概念:多态指同一个实体同时具有多种形式。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态分为动态多态和静态多态
- 静态多态:在程序执行前方法已经被绑定,针对Java简单的可以理解为程序编译期的绑定(静态绑定),Java中的方法是final,static,private和构造方法都是前期绑定的。针对类和对象,使用不同的派生类去让父类的引用指向他们。但是在编译期就已经确定了对象的类型。
- 动态多态:运行时才能确定调用的对象类型
作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
。。。没写完,明天继续