Java的三大特性
Java的三大特性分别是封装、继承、多态。
一、封装
封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体是类,类通常对用户隐藏其实现细节,这就是封装的思想。
封装的好处
- 良好的封装能够减少耦合
- 类的内部的结构可以自由修改
- 可以对成员进行更精确的控制
- 避免了外部操作对内部数据的影响,提高了程序的可维护性
例如:
public class User {
//对用户属性的封装,一个用户的id、姓名、年龄都是这个用户的私有属性
private Integer id;
private String name;
private Integer age;
//对外提供访问这个用户类的接口,setter(),getter()
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
为用户提供对象的属性和行为的接口,用户通过这些接口使用这些类,无须知道这些类内部是如何构成的。
二、继承
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,父类是子类的一般化,子类是父类的特化(具体化)
继承的基本思想是基于某个父类的扩展,制定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。
例如:分别创建Test类和Test2类,再Test类中编写成员方法doSomething()和doIt(),使Test2类继承Test类,重写父类的这两个方法和构造方法,并新增doSomethingnew()方法。其中Test2类的构造方法中使用super关键字调用父类的构造方法和成员方法
class Test{
public Test(){//构造方法
}
protected void doSomething(){//成员方法
}
protected Test doIt(){//方法返回值类型为Test类型
return new Test();
}
}
class Test2 extends test{//继承父类
public Test2(){//构造方法
super();//调用父类的构造方法
super.doSomething();//调用父类成员方法
}
public void doSomethingnew(){//新增方法
}
public void doSomething(){//重写父类方法
}
public Test2 doIt(){//重写父类方法,方法返回值类型为Test2类型
}
}
子类可以连同初始化父类构造方法来完成子类初始化操作,既可以再子类的构造方法中使用super()语句调用父类的构造方法,也可以在子类中使用super关键字调用父类的成员方法。
三、多态
将父类对象应用于子类的特征就是多态。多态的实现并不依赖具体类,而是依赖与抽象类和接口。
抽象类:
使用abstract关键字定义的类就是抽象类,而使用这个关键字定义的方法称为抽象方法。
抽象方法没有方法体,这个方法没有任何意义,除非它被重写,而承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承之外没有任何意义。抽象类被继承后需要实现其中所有的抽象方法
接口:
接口时抽象类的延伸,可以将它看作是纯粹的抽象类,
接口中的所有方法都没有方法体。接口中的方法必须被定义为public或者abstract形式,其他修饰权限不被Java编译器认可,不写的话默认为public abstract。在接口中定义的任何字段都自动是static和final的。
多态的实现方式
-
方式一:重写
-
方式二:接口
-
生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
-
java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。具体可以看 java接口 这一章节的内容。
-
-
方式三:抽象类和抽象方法
多态的理解就是同一种事物,就不同的表现形态