1.什么是面向对象
其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。
2. Java 封装
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
封装的优点
-
\1. 良好的封装能够减少耦合。
-
\2. 类内部的结构可以自由修改。
-
\3. 可以对成员变量进行更精确的控制。
-
\4. 隐藏信息,实现细节。
-
采用 this 关键字是为了解决实例变量(private String name)和局部变量(set Name (String name)中的name变量)之间发生的同名的冲突。
3. Java继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
继承关系中一个父类可以有多个子类,一个子类只能有一份父类
继承关键字
继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java. lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。
extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
implements关键字
使用 implements 关键字可以变相的使Java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
super 与 this 关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
构造器
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
4. Java 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态存在的三个必要条件
-
继承
-
重写
-
父类引用指向子类对象:Parent p = new Child();
5. Java 抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象类
在 Java 语言中使用 abstract class 来定义抽象类。
继承抽象类
我们可以通过以下方式继承 Employee 类的属性:
抽象方法
如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。
Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
抽象类总结规定
-
\1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
\2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
\3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
\4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
\5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
6. Java接口
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
接口可以包含抽象方法和静态常量。
接口与类相似点:
-
一个接口可以有多个方法。
-
接口文件保存在 .Java 结尾的文件中,文件名使用接口名。
-
接口的字节码文件保存在 .class 结尾的文件中。
-
接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
-
接口不能用于实例化对象。
-
接口没有构造方法。
-
接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
-
接口不能包含成员变量,除了 static 和 final 变量。
-
接口不是被类继承了,而是要被类实现。
-
接口支持多继承。
抽象类和接口的区别
-
\1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
-
\2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
-
\3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
-
\4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
(3、1.1 )