8.05 day18

1.toString()函数,每个非基本类型中都有,未重写时默认输出为对象的内存地址。

2.组合:黑盒复用,依赖关系少,高效、动态。

3.继承:白盒复用,黏度高,易维护,破坏封装。

4.优先用组合。

5.super出现在构造方法中必须在第一行。

6.重写:子类修改父类已有的方法(覆盖),重写的方法名、返回类型、参数类型必须完全相同,且被重写的方法不能有更严格的访问权限,发生在多态中,无新受检异常。

7.重载:同一类中方法名相同参数列表不同,只能通过参数列表重载,不能通过访问权限、返回类型、抛出异常重载;重载可以有不同的返回类型、访问权限、异常,但是不作为重载的标志。

8.抽象类abstract抽象类不能实例化,类中有抽象方法,abstract class a1{abstract void test();}函数声明之后有{}就算实现。

9.构造方法、静态方法、final方法不能使用abstract修饰。

10.接口默认为抽象类,实际上接口是抽象抽象类。

11.final类不能被继承,因此final类中的成员函数没有机会被覆盖,默认都是final的。

12.final方法:如果一个类不允许其子类覆盖某个方法,将这个方法声明为final。

13.将类方法声明为final更加高效,编译时绑定,静态绑定。

14.final变量常量,修饰的成员的值一旦给定就无法改变:静态变量、实例变量、局部变量。

15.static和final变量能够自动赋值为默认值。

16.this()本类的构造函数 this.本类的变量或方法

Super()超类的构造函数 super.超类的变量或方法

16. 子类和超类有重名变量时,用this和super区分。

17. 向上转型:子类转型为超类;超类的引用指向子类的对象。

18. 超类的引用不能调用:1子类中定义而超类中没有定义的方法;2子类重写的方法。

19. 只能将子类类型的引用赋值给超类类型的引用。

20. 每个类实例对象都自带一个虚函数表,这个表中存储的是指向虚函数的指针。

21. 超类和子类中都有的方法,才有多态的动态绑定问题。

22. 重写的重要特征:除了函数的实现以外其他部分都相同;覆盖:均相同才能覆盖。

23. Java中所有的成员方法都包含在虚表中,而C++中只有声明为virtual才是虚函数。

24. 动态绑定和静态绑定的适用条件:静态:private、static、final、构造函数。

25. 动态绑定的过程中,先在对象的实际类型的虚表中匹配,找不到的话再上溯到它的基类的虚表中找。

26. this指针始终指的都是实际类型。

27. 动态绑定指的是成员方法,成员变量始终都是静态绑定。

28. 想要动态的调用变量成员,将变量成员封装在方法中返回。

29. 重写是覆盖,同名的方法仅有一个;重载是并列,哪个参数匹配调用哪个。

30. 多态的三种实现方式:1继承实现;2抽象类实现;3接口实现。

31. 接口中只有常量和抽象方法。

32. Java接口中的成员变量默认都是public static final类型的,这些关键字都可以省略,但是必须初始化。

33. Java接口中的方法默认都是public abstract类型,不能有方法体,不能实现。

34. 抽象类和接口的区别:抽象类中可以有写实的方法,但至少要有一个方法是抽象的;接口中所有的方法都必须是抽象的。

35. Java接口中只能包含public static final成员变量和public abstract成员方法。

36. 接口继承接口,类实现接口,类继承类。

37. Java接口必须通过类来实现。

38. 类实现接口时,当所有的方法没有全部被写实时,类应该声明为抽象类。

39. 不允许创建接口实例,但是允许定义接口的引用指向实现了该接口的类实例对象。(类似于向上转型)

40. 抽象类只能在继承体系中实现,而接口可以任意实现。

41. 接口中的常量可以是不定常量,其值会在第一次访问是建立,然后保持不变。

42. 内部类的访问权限控制符有:public、default、protected、private,嵌套内部类static。

43. 创建非静态内部类时,一定要先创建其相应的外部类对象。

44. outerclass.innnerclass innerobject=outerobject.new innerclass()

45. 创建嵌套类对象时,不需要创建其外部类对象。

46. outerclass.innnerclass innerobject=outerclass.new innerclass()

47. 静态内部类不能访问外部类的非静态成员。

48. 局部内部类:定义在一个方法或一个语句块中。

49. 局部内部类访问外部类的局部变量时,只能访问final类型的。

50. 局部内部类的访问优先级:内部类>外部类>局部final变量。

51. 内部类的作用:允许protected和private权限,实现更小层次的封装。

52. 内部类一般与接口联合使用,更好的实现多重继承。

53. 匿名内部类:new 接口名(){} new 超类名(){}

54. 内部类编译时生成的.class文件outerclassname$innerclassname.class 匿名内部类outerclassname$#.class #为数字,从1开始,每生成一个,数字递增1。

55. 在内部类中调用this和new返回一个外部类时的不同,this得到的是创建该内部类的外部类对象的引用;而new创建一个新的引用。

56. 有内部类的实例作为外部类的成员时,构造该外部类时,先创建内部类的成员实例,再创建外部类实例的其他成员。(相当于组合关系)

57. 一个外部类的内部类被另一个类继承时,在该子类的构造方法中用外部类的一个实例调用超类的构造函数。Outerobject.super()。

58. 一般的super()调用默认的都是extends类名中的构造函数。

59. class son extends father{super();}

60. class son extends father.innerclass{fatherobject.super();}

posted @ 2021-08-05 21:43  清梦韶华  阅读(25)  评论(0编辑  收藏  举报