面向对象特性
现象对象特性
面向对象三大特性
封装、继承、多态是面向对象的三大特性。
- 封装就是将属性私有化,提供公有的方法访问私有属性。通过封装,可以实现对属性的数据访问限制,同时增加了程序的可维护性。封装并不仅仅限于属性,也包括方法
- 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类 。
- 多态:方法的重写、重载与动态连接构成多态性;
重写是继承后重新实现父类的方法。重载是在一个类里一系列参数不同名字相同的方法。动态连接则是用基类的引用指向子类的对象。(向上转型)
Java中是否可以覆盖(override)一个private或者是static的方法?
- 重写是子类中的方法和子类继承的父类中的方法一样(函数名,参数,参数类型,反回值类型),但是子类中的访问权限要不低于父类中的访问权限。重写的前提是必须要继承,private修饰不支持继承,因此被私有的方法不可以被重写。
- 即被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
- “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用(同2中的解释)。
抽象类与接口
-
抽象类定义:
抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。
抽象类虽然自身不可以实例化,但是其子类覆盖了所有的抽象方法后,是可以实例化的,所以抽象类的构造函数,适用于给其子类对象进行初始化的 ,即抽象类可以有构造方法。
抽象类和普通类的主要有三点区别:- 抽象类方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。注意:JDK 1.8 以后,抽象类的方法默认访问权限变为default。
- 抽象类不能用来创建对象;
- 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
-
Java规定, 接口中的所有函数必须是public 的, 所有变量必须是public static final的;可以不包含这些修饰符,编译器默认
而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。注:JDK 1.8 以后,接口增加了static静态方法和default默认方法。
-
抽象类与接口的语法区别:
- 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法(注:JDK 1.8 以后,接口增加了static静态方法和default默认方法。);
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口