一、 封装性
(1)核心思想:将数据和对数据的操作封装在一起;
(2)通过封装,可以t通过修改属性的可见性实现对数据访问限制;
(3)封装使得程序更易于理解与维护,也加强了代码的安全性;
(4)封装的优点:
1.良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
public class Person {
private String name;
private int age;
}
//修改属性的可见性来限制对数据的访问;
//这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏;
二 、继承
1.子类与父类
(1)继承是一种由已有的类创建新类的机制。即不用再定义新类,利用已有的在定义子类即可,有需求的话可以增加新的属性和方法。
(2)注意:子类只能有一个父类(超类),不能多重继承。
(3)子类的定义(使用关键字extends):
class 子类名 extends 父类名{
....
}
(4)一个类可以有多个子类,若一个类是定义的新类,则默认为Object的子类;
2、子类的继承性
(1)子类定义的方法可以操作父类的成员变量;
(2)子类和父类在同一个包中时,子类可以继承父类中非private变量和方法;
(3)子类和父类不在同一个包中时,子类只继承父类中的protected和public访问权限的成员变量和方法作为子类的成员变量和方法,而父类的private和友好访问权限的成员变量不会被继承。
3,子类继承的方法可以操作未从父类继承private变量,若子类声明的成员变量的名字和从父类继承的成员变量的名字相同时,所继承的成员变量就会被隐藏;
public class People{
public double height;
public void chengZhang(int h){
height+=h;
}
}
public class ChinaPeople extends People{
public int height;
public void bigChengZhang(int h){
height+=h;
}
}
//ChinaPeople.height=170.33 错误,因为ChinaPeople类中的height已经定义为int型;
//ChinaPeople.bigChengzhang(10) //ChinaPeople.chengZhang(10.77)
(1)子类继承的方法只能操作子类继承和被隐藏的成员变量,子类新定义的方法可以操作子类继承的以及自己新声明的成员变量,无法操作被隐藏的成员变量;
4,方法重写
(1)子类可以通过重写来隐藏从父类继承的方法
(2)子类重新定义的方法的类型(也可是父类方法类型的子类型)、方法的名字、参数的个数、和类型与父类完全相同,子类则完成了方法的重写。
public class Enter{
void enterRule{double math,double english,double chinese}{
double total=math+english+chinese;
if(total>180){
total/=3;
}
else{
total=180;
}
}
}
public class HigherEnter extends Enter {
void enterRule{double math,double english,double chinese}{
double total=math+english+chinese;
if(total>230){
total/=3;
}
else{
total=230;
}
}
}
//子类HigherEnter完成了对父类Enter中enterRule的重写;
注意:
(1)重写后的方法和被隐藏的方法的功能基本相同,不同的是其不能操作被隐藏的成员变量
(2)重写方法时,方法的类型必须要与被隐藏的方法的类型相同,否则就会产生编译错误;
(3)重写方法的参数的类型和个数也要与被隐藏的方法保持一致,否则就变成了重载;
(4)重写时可以提高方法的访问权限,而不可降低方法的访问权限
5.super关键字
(1)用于操作被隐藏的方法和成员变量;
super.x//x是被隐藏的变量
super.play//play是被隐藏的方法
(2)当用子类的构造方法创建一个变量时,子类的构造方法首先调用父类中不带参数的构造方法(使用super)
6.final关键字
(1)修饰类:该类不再允许被继承
final class A{
.....
}
(2) 修饰方法:则该方法不能子类被重写,乖乖的继承,不允许篡改;
(3)修饰变量:使得变量成为了常量;
三、多态
1.继承与多态子类在重写父类的方法时,产生了自己特有的行为状态,并将子类创建的对象的应用上转给父类创建的一个对象
class Animal{
void eat(){
}
}
class Panda extends Animal{
void eat(
System.out.println("zhuzi");
}
}
class doge extends Animal{
void eat{
System.out.println("gutou");
}
}
2.多态的优点
(1). 消除类型之间的耦合关系
(2). 可替换性
(3). 可扩充性
(4). 接口性
(5). 灵活性
(6). 简化性
3.接口与多态