1
2 子类与父类
3 使用extends关键字来声明一个类是另一个类的子类
4 如:class 子类名字 extends 父类名字
5 若是 没有使用extends关键字,那么默认是Object类的子类 包java.lang中
6 父类的数据成员在类中全部存储,包括子类中不能访问的数据成员 (可能有方法会用到)
7
8 子类的继承性:继承的成员变量和成员方法 的访问权限保持 不变
9 如果子类和父类在同一个包中
10 子类继承父类 不是private的 :成员变量 和 成员方法
11 如果子类和父类在不同的包中
12 子类继承父类 protected,public 的 成员变量和成员方法
13 子类不能继承父类的友好变量 和友好 方法
14
15 protected说明:
16 protected:声明的变量和方法,只能在本包中 和子类中进行访问,其他的访问出错
17 类A的protected的变量 和方法 可以被 类A的直接 子类 和间接子类 继承;
18 若在子类B中有声明了protected 的变量和方法:
19 若:其他的类D要想访问子类B的这个protected的变量和方法,只需要这个类D和 类B在同一个 包中
20 若:其他的类D想要访问子类B的父类的proteced的变量和方法,只需要这个类D和 类B的父类 在同一个包中,即可
21 就是追溯到父类的源头 A类
22
23 子类对象构造
24 用子类的构造方法创建对象的时候:子类的构造方法默认会先调用父类的无参构造方法
25
26 成员变量的隐藏:
27 子类中声明的变量和父类中声明的变量同名字:子类就隐藏了 从父类中 继承的这个成员变量
28 使用的是 在子类中新声明的这个同名的变量
29 方法的重写:
30 子类可以通过重写 隐藏 从父类 继承的 实例方法:
31 若是子类想使用 被隐藏的变量或者方法可以是使用super关键字 :super.变量|方法
32
33
34 子类构造方法:
35 super();若是没有写super();会默认有super();默认调用父类的无参构造方法
36 也可以用super(name...);等等父类的多个构造方法
37 比如父类中 name属性
38 1:name=null;
39 2:调用子类的构造函数:
40 3:子类的构造方法 会自动调用 写super("Tom",..)方法
41 4:父类的this.name=name 变成 自定义的值Tom
42 5:然后返回子类中,继续初始化其他方法
43
44 final关键字:
45 final关键字可以修饰:类,成员变量,局部变量,方法
46 final修饰类:这个类不能被继承,即不能有子类-> final class A
47 final修饰方法:这个方法不能被 子类重写
48 final修饰成员变量和局部变量:那么这个变量 就是常量,不能更改,且必须在声明时给出默认值
49
50
51 对象的上转型对象
52 类A 是 类 B 的父类
53 当用子类B创建 一个对象b的时候(即:已经分配了内存空间,子类对象存着引用)
54 将这个对象的引用b放到父类的对象a中,那么称对象a为对象b的上转型对象
55 A a=new B();
56 上转型对象的实体 会失去 子类对象创建实体的一些属性:(空间内存中仍然存在,不过不能访问)
57 上转型对象a不能操作子类b 新增的成员变量,
58 上转型对象a不能调用子类b 新增的成员方法
59 上转型对象a可以访问子类b 继承或隐藏的 父类a的成员变量:操作都是父类的成员属性
60 上转型对象a可以调用子类b 继承a的方法:操作的是 父类的继承方法
61 若是子类重写了父类的方法,那么上转型对象操作的是 子类中的这个重写的方法
62 上转型对象a可以强制转换到 子类对象b,此时子类对象 有具备了子类的所有功能
63 注意:父类创建的对象 不能转给子类
64
65
66 多态:父类的某个方法被其子类重写时,可以各自产生不同功能
67 多态分为:静态多态,动态多态
68 静态多态:在编译时,就能确定执行哪一段代码(与重载有关)
69 动态多态:在运行时,才能确定引用哪一段代码(与重写父类方法和上转型对象有关)
70 在未运行之前,可能有多个方法调用,不能确定执行调用哪一个
71
72 abstract类和方法
73 abstract修饰的类称为 (abstract) 抽象类
74 public abstract class A
75 抽象类中可以有:抽象方法和 非抽象方法
76 抽象类 不能使用new 运算符 创建对象
77 用abstract修饰的方法 称为(abstract) 抽象方法:public abstract void speak();
78 抽象方法,只允许声明而不允许实现,且final 和abstract不能同时修饰同一个方法
79 如果一个非抽象类B 是 一个 抽象类A的子类 ,那么 这个 非抽象类 B必须 重写 父类 抽象类A的所有抽象方法,给出方法体
80 如果一个 抽象类 B 是 一个抽象类A的子类 ,那么 这个 抽象类 B 可以重写父类 抽象类A 的 抽象方法;也可以继承 ,不用重写
81 抽象类:只关心操作:即 方法的名字,类型,和参数,不关心方法体
82
83 abstract与多态
84 abstract类声明的对象a 作为子类b的上转型对象 ,可以调用子类b 重写的 方法
85 A a= new B()|new C()|new D();//上转型对象,可以调用 不同子类的方法,但是实现都是同一个方法名字
86 a.方法speak();
87 程序设计时:通过abstract类声明若干个abstract方法,方法体 由它的非abstract类去实现
88 首先对abstract类的修改进行关闭;
89 否则 一旦在修改abstract类,那么所有的子类都会重新作出修改
90 在程序设计好之后,然后 对abstract 的子类开放
91
92 接口:
93 java不支持多继承性:一个类只能有一个父类
94 但是一个类可以 实现多个接口
95 接口的声明:interace 声明接口:
96 interface 接口的名字->interface A{...}
97 接口体:包含常量定义 和 方法定义
98 常量:接口 中的所有常量 访问权限一定是public final;
99 且常量不可变 public final int cnt=0;//public,final可以省略
100 常量可同通过接口名字调用|或者 实现接口的类 的 类名调用--->接口名.Max|A.Max
101 方法:接口 中 只有 抽象方法,没有普通方法
102 且访问权限是public abstract;可以省略public ,abstract
103 一个类可以通过使用关键字implements声明 自己 实现 一个 或者多个接口(用,隔开接口名)
104 public class A implements 接口1,接口2,...{}
105 如果一个类 实现了某个接口,那么这个类必须重写 这个 接口的 所有方法:一定要加上public
106 重写的方法 要去掉 abstract修饰:即: public 返回类型 方法名(参数){}
107 若一个类 为抽象类A 实现了某个接口,那么可以暂时不用重写 这个接口的abstract方法
108 但是若抽象类A的子类不是抽象类,那么必须重写 所有的abstract方法
109
110 接口回调 :相当于 上转型对象 ,这两个很类似
111 接口回调:是指把 实现 某一个接口的类 B 创建的对象的 引用 b(new B()) 赋值给 接口声明的变量 a(A a;)
112 那么接口变量 a 就可调用 被 这个 类B 重写的接口方法
113 同样不能new 接口,因为没有任何实现,即没有分配内存
114 由接口实现的多态是:不同类 在实现 同一个接口时 ,可能具有不同的实现方式,
115 那么接口变量在回调接口方法 时,就可能 具有 多种多态
116 面向抽象编程包括两种:面向抽象编程 和 面向接口编程