封装
子类的数据字段设置为private不被其他类通过(A.field)形式直接访问,外部只能通过公开方法得到。下面这个例子就是封装私有字段,对外提供公开接口。
<!--双重否定来获取单例-->
public class Singleton{
private Singleton singleton;
private Singleton();
public Singleton getInsatance(){
if(singleton==null){
sychonized(this){
<!--如果没有判断,另一个被阻塞在sychonized外面的线程进入后会再次创造实例-->
if(singletono==null){
singleton=new Singleton();
}
}
}
return singleton;
}
}
优点:(1)减少耦合(2)隐藏细节
多态
编译时多态
通过方法的重载,根据不同的参数类型调用不同的方法
运行时多态
父类对象引用子类实例时,p.toString()使用父类的方法还是子类的方法,看运行时再确定。如果子类覆盖toString(),那么执行子类的,否则实现父类的函数。
Person p = new Man();
p.toString();
继承
- 不能继承父类的构造,但是可以通过super()访问。
- 子类可以覆盖父类中的方法。
- 子类通过extends单继承父类。
- 不能继承父类的私有成员,但是可以覆盖其他实例变量
- 不能覆盖父类静态方法和静态函数。
抽象
-通过接口或抽象类实现,将一类事务特征提取出来形成规范。