封装
最小程度赋予属性,方法权限控制,能给private的绝不给protect。
例如我们有这样一个类:
public class Car {
private int price;
public Car(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
我们并不希望Car类中的price属性一旦被创建,就不允许被外部人为进行修改,但同时也希望它能够被外部访问进行读取。所以我们设定了price属性的权限修饰符为private,并且提供了一个public的getPrice()方法,这样就能完美达到我们的期望。(当然,这里并不考虑反射。。。)
继承
我们通常都需要考虑实现接口和继承父类的形式。这两种形式主要区别如下:
- 实现接口:对功能的抽象,可多继承
- 继承父类:对对象的抽象,单继承(无需考虑所有对象都继承自Object类)
虽然基本每个大佬对你说,都是说继承接口优先于继承父类,但是实际开发还是要看业务场景,进行斟酌。
多态
多态的实现必须满足:父类引用指向子类对象,然后调用父类引用在子类中进行了重写的方法。
例如:
public class Test {
static class Person {
public void say() {
System.out.println("我是人类");
}
}
static class Chinese extends Person {
@Override
public void say() {
System.out.println("我是中国人");
}
}
static class American extends Person {
@Override
public void say() {
System.out.println("I am american");
}
}
public static void main(String[] args) {
Person person = new Chinese();
person.say();
}
}
但是方法的重载其实也是Java多态的一种体现。重载指的是方法名相同,而参数类型或者是参数个数不一致的几个方法,而重写则是子类对父类同个方法(方法签名一致:方法名相同,参数个数相同,参数类型也相同)有了不同的实现。