java学习笔记2--面向对象编程( 十 )


Root的静态初始化块Mid的静态初始化块Leaf的静态初始化块Root的普通初始化块Root的无参数的构造器Mid的普通初始化块Mid的无参数的构造器Mid的带参数构造器,其参数值:尚硅谷Leaf的普通初始化块Leaf的构造器--------------------------------------------------------Root的普通初始化块Root的无参数的构造器Mid的普通初始化块Mid的无参数的构造器Mid的带参数构造器,其参数值:尚硅谷Leaf的普通初始化块Leaf的构造器
23.3.2 练习2
静态代码块优于main()方法的执行
class Father {static {System.out.println("11111111111");}{System.out.println("22222222222");}public Father() {System.out.println("33333333333");}}public class Son extends Father {static {System.out.println("44444444444");}{System.out.println("55555555555");}public Son() {System.out.println("66666666666");}public static void main(String[] args) { // 由父及子 静态先行System.out.println("77777777777");System.out.println("************************");new Son();System.out.println("************************");new Son();System.out.println("************************");new Father();}}
111111111114444444444477777777777************************22222222222333333333335555555555566666666666************************22222222222333333333335555555555566666666666************************2222222222233333333333
23.4 属性赋值的执行顺序
1.默认初始化
2.显式初始化或者非静态代码块初始化(看两者声明的先后顺序)
3.构造器初始化
4.调用对象.属性或对象.方法进行赋值
24.final关键字24.1 练习1
public class Something {public int addOne(final int x) {return ++x;编译错误,x不能重新赋值// return x + 1; 正确,没有赋值操作} }
24.2 练习2
public class Something {public static void main(String[] args) {Other o = new Other();new Something().addOne(o);}public void addOne(final Other o) {// o = new Other();错误,不能重新赋值o.i++;正确,引用数据类型变量中的内容可以改变,因为其属性不是final的} }class Other {public int i; }
25. 关键字 25.1 意义
如果一个方法不确定方法体的内容,可以将该方法声明为抽象的,到子类中去重写该方法,该方法所在的类是抽象类 。
25.2 抽象类 25.2.1 格式
权限修饰符 abstractclass 类名{}
25.3 抽象方法 25.3.1 格式
权限修饰符 abstract 返回值类型 方法名(形参列表);
25.4 细节25.5 抽象类与普通类的区别
抽象类只比普通类多了定义抽象方法的功能,而且不能被实例化,其它没有什么不同(都可以有任意的成员) 。
25.6 不能修饰静态方法、私有方法、final方法、final类25.7 抽象类匿名子类的匿名对象25.7.1 抽象类匿名子类的对象
class EmployeeTest {public static void main(String[] args) {Employee是抽象类,匿名子类是不创建抽象类的子类直接使用下面的形式来创建对象,需要重写所有的抽象方法Employee e = new Employee() {@Overridepublic void work() {System.out.println();}};}}public abstract class Employee {public Employee() {}public abstract void work();}
25.7.2 抽象类匿名子类的匿名对象
class EmployeeTest {public static void main(String[] args) {需要重写所有的抽象方法new Employee() {@Overridepublic void work() {System.out.println();}}.work();}}public abstract class Employee {public Employee() {}public abstract void work();}