访问控制权限又称为封装,它是面向对象三大特性中的一种,我之前在学习过程中经常会忽略封装,心想这不就是一个访问修饰符么,怎么就是三大特性的必要条件了?后来我才知道,如果你信任的下属对你隐瞒bug,你是根本不知道的。
访问控制权限其实最核心就是一点:只对需要的类可见。
Java中成员的访问权限共有四种,分别是 public、protected、default、private,它们的可见性如下
继承是所有 OOP(Object Oriented Programming) 语言和Java语言都不可或缺的一部分。只要我们创建了一个类,就隐式的继承自 Object 父类,只不过没有指定。如果你显示指定了父类,那么你继承于父类,而你的父类继承于Object 类。
继承的关键字是extends ,,如上图所示,如果使用了extends 显示指定了继承,那么我们可以说Father是父类,而Son是子类,用代码表示如下
class Father{}
class Son extends Father{}
继承双方拥有某种共性的特征
class Father{
public void feature(){
System. out. println("父亲的特征");}
}
}
class Son extends Father {}
如果Son没有实现自己的方法的话,那么默认就是用的是父类的 feature方法。如果子类实现了自己的feature方法,那么就相当于是重写了父类的 feature方法,这也是我们上面提到的重写了。
多态指的是同一个行为具有多个不同表现形式。是指一个类实例(对象)的相同方法在不同情形下具有不同表现形式。封装和继承是多态的基础,也就是说,多态只是一种表现形式而已。
如何实现多态?多态的实现具有三种充要条件
比如下面这段代码
public class Fruit {
int num;
public void eat(){
System. out.println( "eat Fruit");
}
}
public class Apple extends Fruit{
@Override
public void eat() {
super.num = 10;
System. out.println( "eat " + num + " Apple");
}
public static void main(String[] args) {
Fruit fruit = new Apple();
fruit.eat();
}
}
你可以发现 main方法中有一个很神奇的地方,Fruit fruit = new Apple() ,Fruit类型的对象竟然指向了Apple对象的引用,这其实就是多态->父类引用指向子类对象,因为 Apple继承于
Fruit,并且重写了eat方法,所以能够表现出来多种状态的形式。
组合其实不难理解,就是将对象引用置于新类中即可。组合也是一种提高类的复用性的一种方式。如果你想让类具有更多的扩展功能,你需要记住一句话多用组合,少用继承。
public class SoccerPlayer {
private String name;
private Soccer soccer;
}
public class Soccer {
private String soccerName;
}
代码中SoccerPlayer 引用了Soccer类,通过引用Soccer类,来达到调用soccer中的属性和方法。组合和继承是有区别的,它们的主要区别如下。
关于继承和组合孰优孰劣的争论没有结果,只要发挥各自的长处和优点即可,一般情况下,组合和继承也是一对可以连用的好兄弟。
除了继承和组合外,另外一种值得探讨的关系模型称为代理。代理的大致描述是,A想要调用B类的方法,A不直接调用,A会在自己的类中创建一个B对象的代理,再由代理调用B的方法。例如如下代码
public class Destination {
public void todo(){
System.out.println( "control. . .");
}
}
public class Device {
private String name;
private Destination destination;
private DeviceController deviceController;
public void control(Destination destination){
destination.todo();
}
}
public class DeviceController {
private Device name;
private Destination destination;
public void control(Destination destination){
destination.todo();
}
}
向上转型代表了父类与子类之间的关系,其实父类和子类之间不仅仅有向上转型,还有向下转型,它们的转型后的范围不一样
static 是Java 中的关键字,它的意思是静态的 ,static 可以用来修饰成员变量和方法,static 用在没有创建对象的情况下调用方法/变量。
static String name = "cxuan " ;
static void printMessage(){
System.out. println( " cxuan is writing the article");
}
static除了修饰属性和方法外,还有静态代码块的功能,可用于类的初始化操作。进而提升程序的性能。
public class staicBlock {
static{
System. out.println( "I 'm A static code block ");
}
}
由于静态代码块随着类的加载而执行,因此,很多时候会将只需要进行一次的初始化操作放在 static代码块中进行。
final 的意思是最后的、最终的,它可以修饰类、属性和方法。