java 面向对象

Posted by ZhengYang on 2016-09-13

1 面向对象的三个特征

  1. 封装
    隐藏类的实现细节,只能通过事前制定好的方法来访问数据,可进行数据检查。
    例子,将成员变量声明为private,再通过public的方法(setXxx,getXxx)对这个变量进行访问。
  2. 继承
    使用以前建造的类的方法和属性,只能继承private和public的方法和属性super
  3. 多态
    有继承,有重写,父类引用指向子类对象

2 构造函数

  • 与类同名
  • 一般都是public的,除非单例
  • 不含返回值
  • 也可以被重载
  • 一旦用户定义类构造函数,系统不再提供默认构造函数

3 this

  • 所属对象的引用变量
  • 类成员变量和构造函数的形参同名,类成员变量前必须用this
  • 指代构造函数

4 调用成员变量

实例
成员变量
静态成员变量

5 重载 重写

重载:是在同一个类中允许同时存在一个以上的同名函数,但参数个数或类型不同。

  • 注意:不允许两个方法的参数相同,但返回值不同的情况。

6 static

  • 只能在类中,声明成员变量和成员函数
  • 不能在函数内声明static

7 final

final 可以声明类,属性,方法

  • 类不能被继承
  • 属性为常量
  • 方法不能被子类继承

8 抽象类 接口

  • 抽象类,抽象方法必须用abstract修饰
  • 抽象类不能被new
  • 抽象方法只能声明,不能实现
  • 抽象类的子类必须实现所有的抽象方法,才能被new,否则还是abstract类
  • 接口是抽象方法和常量值的定义的集合,接口是一种特殊的抽象类
  • 接口可以继承接口
  • 抽象方法不能new,只能通过子类extends抽象类,并实现全部抽象方法,子类才能new。
  • 抽象类中的成员变量,和普通类的成员变量没区别,只是方法有区别。
接口 抽象类
接口的方法默认是public,所有方法在接口中不能有实现 抽象类可以有非抽象的方法
接口中的实例变量默认是final,只能赋值一次 而抽象类中则不一定
一个类可以实现多个接口 一个类最多只能继承一个抽象类
一个类要实现接口的话,必须实现接口的所有方法 一个类要继承一个抽象类的话,不必实现所有的抽象方法
接口不能用new实例化,但可以声明,必须引用一个实现了该接口的对象

如果一个类只实现了接口的部分方法,那么该接口变为抽象类

9 多态

多态(Polymorphic)也叫动态绑定(Dynamic Binding)
动态绑定是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用其相应的方法。
多态必备的三个条件

  • 有继承
  • 有重写
  • 父类引用指向子类对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
interface PCI{
void start();
void stop();
}
class NetworkCard implements PCI{
public void start(){
System.out.println("Send ");
}
public void stop(){
System.out.println("Stop ");
}
}
class SoundCard implements PCI{
public void start(){
System.out.println("SoundCard start");
}
public void stop(){
System.out.println("SoundCard stop");
}
}
class MainBoard{
public void usePCICard(PCI p){
p.start();
p.stop();
}
}
public class Assembler {
public static void main(String[] args){
MainBoard m = new MainBoard();
NetworkCard n = new NetworkCard();
m.usePCICard(n);
SoundCard s = new SoundCard();
m.usePCICard(s);
}
}
//// 输出
// Send
// Stop
// SoundCard start
// SoundCard stop