day07
面向对象
面向对象三大特性:封装、继承、多态
类设计技巧
1.一定要保证数据私有
这是最重要的;绝对不要破坏封装性。
2.一定要对数据初始化
Java不对局部变量进行初始化,但是会对对象的实例域进行初始化。最好不要依赖于系统的默认值,而是应该显式地初始化所有的数据,具体的初始化方式可以是提供默认值,也可以是在所有构造器中设置默认值。
3.不要在类中使用过多的基本类型
就是说,用其他的类代替多个相关的基本类型的使用。这样会使类更加易于理解且易于修改。
4.不是所有的域都需要独立的域访问器和域更改器
在对象中,常常包含一些不希望别人获得或设置的实例域(可不设置get、set方法)
5.将职责过多的类进行分解
如果明显地可以将一个复杂的类分解成两个更为简单的类,就应该将其分解
6.类名和方法名要能够体现它们的职责
与变量应该有一个能够反映其含义的名字一样,类也应该如此;
命名类名的良好习惯是采用一个名词,类用名词,方法用动词
不可变的类:没有方法能修改对象的状态
有些方法并不是更改对象,而是返回状态已修改的新对象。
更改对象的问题在于,如果多个线程试图同时更新一个对象,就会发生并发更改。其结果是不可预料的。如果类是不可变的,就可以安全地在多个线程间共享其对象。因此,要尽可能让类是不可变的
继承
C++注释:Java与C++定义继承类的方式十分相似。Java用关键字extends代替了C++中的冒号(:)。在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承。
this与super
关键字this有两个用途:一是引用隐式参数,二是调用该类其他的构造器。
super关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器。
this()和super()都必须放在构造器第一行,所以this与super不能同时存在
子类方法重载
C++注释:在Java中,不需要将方法声明为虚拟方法。动态绑定是默认的处理方式。如果不希望让一个方法具有虚拟特征,可以将它标记为final
在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。特别是,如果超类方法是public,子类方法一定要声明为public。
多态
在Java中,子类数组的引用可以转换成超类数组的引用,而不需要采用强制类型转换。
阻止继承:final类和方法
不允许扩展的类被称为final类。如果在定义类的时候使用了final修饰符就表明这个类是final类。(final类中的所有方法自动地成为final方法)。
域也可以被声明为final。对于final域来说,构造对象之后就不允许改变它们的值了。不过,如果将一个类声明为final,只有其中的方法自动地成为final,而不包括域。
将方法或类声明为final主要目的是:确保它们不会在子类中改变语义。
String类也是final类,这意味着不允许任何人定义String的子类。换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。
类的强制类型转换
对象引用的转换语法与数值表达式的类型转换类似,仅需要用一对圆括号将目标类名括起来,并放置在需要转换的对象引用之前就可以了。
包含一个或多个抽象方法的类本身必须被声明为抽象的。
抽象类
C++注释:在C++中,有一种在尾部用=0标记的抽象方法,称为纯虚函数,只要有一个纯虚函数,这个类就是抽象类。
抽象类不能被实例化。也就是说,如果将一个类声明为abstract,就不能创建这个类的对象。
包含一个或多个抽象方法的类本身必须被声明为抽象的。
抽象方法充当着占位的角色,它们的具体实现在子类中。
类即使不含抽象方法,也可以将类声明为抽象类。
标签:Java,对象,子类,day07,C++,方法,final From: https://www.cnblogs.com/xkh-blogs/p/17231086.html