面向对象三大特性
面向对象三大特性
封装(Capsulation)
封装就是把类里的属性私有,然后写get/set方法去调用这些private属性;起到一个保护数据的作用,
比如一个人的年龄,假如用户输入超过一个值,在set方法里提前判断一下,不让用户输入。
封装是数据的隐藏高内聚,低耦合
高内聚:类的内部数据自己完成,不允许外部干涉
低耦合,只暴露少量的方法给外部使用
属性私有 get/set
public class Person {
//private属性 和public对立
private String name;
private int age;
//get set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
继承(inheritance)
继承就是子类指向父类,关系上有is...a的关系,比如Cat类和它的父类Animal类,那么就可以说Cat is a Animal
子类继承 父类的所有属性方法,子类时父类的拓展细分,有着父类所没有的,更多更细的一些属性方法
object类
在Java中所有的类都直接或间接继承Object类
super
代表父类引用
-
super()调用父类构造器必须在代码第一行,这是默认调用的
-
super只能在子类的方法或构造方法中
-
super和this不能同时调用
多态(polymorphism)
Java的继承是只允许单继承的,这样便于维护,但是单继承所带来的功能可能就会有局限,于是就引入一个重写的概念,也就是多态性的体现。
方法重写
需要有继承关系,子类重写了父类的方法,当一个父类引用指向子类对象的时候,这个对象执行的方法如果被子类重写,那么他会执行子类的方法而不是父类的方法。
- 方法名必须相同
- 参数列表必须相同
- 修饰符,范围可以扩大但不能缩小 public > protected > defalut > private
- 抛出的一场,范围可以缩小 但不能扩大
父类
public class Person {
public void text(){
System.out.println("==>textPerson");
}
}
子类
public class Student extends Person{
@Override
public void text() {
System.out.println("是我textA哒!");
}
}
Application
public class Application {
public static void main(String[] args) {
Student a = new Student();
//父类引用指向子类
Person b = new Student();
Person c = new Person();
a.text();
b.text();
c.text();
}
}
可以看到,在Application类那里,b是一个Person类,但指向的是子类Student,这个b执行的text()方法就不是Person了,而是执行Student类里重写过的text(),然后对象c就是Person的实例化,调用text是Person类里的text()方法,b和c都是Person类,调用同名方法却表现出不一样,就是多态性的体现了。