面向对象程序设计的一些思考
作者:张珂
2019/7/7 13:28:50
1.简书接口与抽象类之间的区别
1.抽象类中可以写非抽象类的方法,从而避免在子类中重复书写他们,提高代码的复用效率。 接口中只能有抽象的方法。
2.一个类只能继承一个直接父类,这个父类可以是具体的类也可以是抽象的类,但一个类可以实现多个接口。(接口是对动作的抽象,而抽象是对本源的抽象——举个例子,男人,女人这两个类可以抽象成更高级的抽象类-人,但一个生物不可能既是人又不是人,所以一个类只能继承一个抽象类)
3.接口里只能对方法进行声明,抽象类既可以对方法进行声明,也可以进行实现。
4.抽象类中的成员变量是多种多样的,而接口中的成员变量只能是 public static final 类型的
5.接口中不能含有静态代码块以及静态方法(用static修饰的方法),而抽象类可以有静态代码块和静态方法。
2.简述面向对象语言的3个基本属性及其作用
1.封装、继承、多态
封装:把事物抽象成一个类,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系。 封装符合面向对象设计的 单一性原则 一个类把自己要做的事情封装起来,而不是暴露给其他类处理,当内部逻辑发生变换时,外部调用不用因此修改,他们只调用外部的接口,而不用关心内部的实现。
继承:
Java的类可以分为三类:
类:使用class定义,没有抽象方法
抽象类:使用abstract class定义,可以有也可以没有抽象方法
接口:使用inerface定义,只能有抽象方法
在这三个类型之间存在如下关系:
类可以extends:类、抽象类(必须实现所有抽象方法),但只能extends一个,可以implements多个接口(必须实现所有接口方法)
抽象类可以extends:类,抽象类(可全部、部分、或者完全不实现父类抽象方法),可以implements多个接口(可全部、部分、或者完全不实现接口方法)
接口能extends多个接口
继承以后子类可以得到什么:
子类拥有父类非private的属性和方法(//这里其实我是持怀疑态度)
子类可以添加自己的方法和属性,即对父类进行扩展
子类可以重新定义父类的方法,即多态里面的覆盖。
关于构造函数:
构造函数不能被继承,子类可以通过super()显示调用父类的构造函数
创建子类时,编译器会自动调用父类的 无参构造函数
如果父类没有定义无参构造函数,子类必须在构造函数的第一行代码使用super()显示调用
3.简述匿名内部类的特点
不具有类名; 不能具有抽象和静态属性; 不能派生出子类。