JavaSE:Java基础1:Java面向对象三大特性
Java面向对象三大特性 : 封装、继承、多态。
面向对象思想中有两个概念,类和对象。
类:对某一类事物的抽象描述。
对象:现实生活中该类事物的个体。
好吧,很抽象是不是,不要紧,有图有真相。
本人喜爱足球,所以拿足球举例了。
图中可以将中场看作一个类,下面的球员名称看成对象,从中场和球员名称的关系可以看出类和对象的关系。
中场可以描述多个球员名称单位共同特征,它是对象的模板。下面的球员名称就是现实中的个体,是类的实例。
类是对对象的抽象,用于描述一组对象的共同特征和行为。
类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征(属性),成员方法描述对象的行为(方法)。
如:class player {
private String position; //定义String类型的变量position
//定义 kick()方法
public void kick(){
System.out.println("大家好,我踢的位置是"+position+"!");
}
}
类的封装:定义一个类时,将类中的属性私有化,使用private关键字来修饰,私有属性只能在它所在的类中被访问。为了让外界可以访问私有属性,需要提供一些使用pulic修饰的公共方法,其中包括用于获取属性值的getXxx()方法和设置属性值的setXxx()方法。
封装场景:假设有个学生类,如果没有对它的age属性设置私有属性,便可以在给它的age属性赋值为-30,这肯定是不符合逻辑的。为了对该学生类的成员变量进行限定,不允许外界随意访问,这时候就需要实现类的封装。实际开发中用的比较频繁。
java四种访问权限:https://www.cnblogs.com/jinggod/p/8425423.html。(转的某位少侠的)
类的继承: 在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。
继承场景:日常开发中,通常把一些常用的备用字段、时间、分页类等放到一个类中,其它业务类继承该公共类即可。
java类中只能是单继承(继承类),多实现(实现接口)。
为何是单继承,如果可以继承多个父类,当多个父类中有重复的属性或者方法,子类不知道具体调用哪一个,就好比儿子/女儿只能有一个亲生父亲,因此是单继承。
需要注意的是 Java 不支持多继承,但支持多重继承。
上面截图引用菜鸟教程,http://www.runoob.com/java/java-inheritance.html。
为何是多实现,通过实现接口拓展类的功能,若实现的多个接口中有重复的方法也没关系,因为实现类中必须重写接口中的方法,所以调用时还是调用的实现类中重写的方法。那么各个接口中重复的变量又是怎么回事呢? 接口中,所有属性都是 static final修饰的,即常量,这个什么意思呢,由于JVM的底层机制,所有static final修饰的变量都在编译时期确定了其值,若在使用时,两个相同的常量值不同,在编译时期就不能通过。参考:(https://blog.****.net/u014507083/article/details/52810283?locationNum=3&fps=1)。
类的多态:同一个行为具有多个不同表现形式或形态的能力,在同一个方法中,由于参数类型不同导致执行结果不同的现象。
多态场景:使用的比较多io流。看一下链接,https://blog.****.net/u013679744/article/details/77686646。
现实中,比如我们按下 F1 键这个动作:
- 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
- 如果当前在 Word 下弹出的就是 Word 帮助;
- 在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
多态的优点
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
多态存在的三个必要条件
- 继承:子类继承父类
- 重写:子类重写父类的方法
- 父类引用指向子类对象(向上转型):Animal a = new Dog();
- 向下转型:Dog d = (Dog)new Animal(); 向下转型是为了使用子类特有的功能。