1.不可被继承的成员与最终类:
在默认情况下,所有的成员变量和成员方法都可以被覆盖,如果父类的成员不希望被
子类的成员锁覆盖可以将它们声明为final。如果用final来修饰成员变量,则说明该成员变量
是最终变量,即常量,程序中的其他部分都可以访问,但不能修改。如果用final修饰成员方法
,则该成员方法不能被子类覆盖,即该方法为最终方法。对于一些比较重要且不希望被子类
重写的方法,可以使用final修饰符对成员方法进行修饰,这样可以增加代码的安全性
2.注意:所有被private修饰符限定为私有的方法,以及所有包含在final类中的方法,都被
默认为final的。这些方法既不能被子类继承,也不可能被覆盖,所以他们自然就是最终的方法
3.定义在类中的final成员变量和定义在方法中的final局部变量一旦给定,就不能更改
大体上说,final成员变量和final局部变量都是只读量,他们能且只能被赋值一次,而不能被
赋值多次
4.一个成员变量若被static final 两个修饰符所限定时,它实际的含义就是常量,所以在
程序中通常用static和final一起来指定一个常量,且这样的常量只能在定义时赋值
5.定义一个成员变量时,若只用final修饰而不能用static修饰,则必须且只能赋值一次
,不能默认。这种成员变量的赋值方式只有两种:一种是定义变量时赋初值;另一种是在某一个
构造方法中进行赋值
6.Object类常用的方法:
1.public boolean equals(Object obj):判断两个对象变量所指向的是否为同一个对象
2.public String toString () :将调用toString()方法的对象转换成字符串
3.public final Class getClass() :返回运行时对象所属的类
4.protected Object clone() :返回调用该方法的对象的一个副本
7.对字符串变量来说,使用“==”运算符和equals()方法来比较字符串时,其比较方式是
不同的。“==”运算符用于比较两个变量本身的值,即两个对象在内存中的首地址,而
equals()方法则是比较两个字符串中所包含的内容是否相等;而对于非字符类型的变量来说,
“==”运算符和equals()方法都用来比较其所指对象在堆内存中的首地址,换句话说,“==”
运算符和equals()方法都是用来比较两个类类型的变量是否指向同一个对象;另外,对于s3和
s4这两个由字符串常量所生成的变量,其中所存放的内存地址是相同的。
8.toString方法:将调用该方法的对象的内容转换成字符串,并返回其内容,但返回的是一些
毫无意义且看不懂的字符串。因此,如果要用toString()方法返回对象的内容,可以重新定义
该方法以覆盖父类的同名方法满足需求
9.getClass方法:功能是返回运行时的对象所属的类
10.对象运算符:instanceof
instanceof运算符测试一个指定对象是否是指定类或它的子类的实例,若是返回true,不是
返回false
11.getName()方法返回一个类的名称
getSubclass()方法获得父类
12.抽象类:在java语言中还可以创建专门的类作父类,这种类被称为抽象类(abstract class)
.抽象类的作用:有点类似“模板”,其目的是根据它的格式来创建和修改新的类
但是不能 直接由抽象类创建对象,只能 通过抽象类派生出新的子类,再由其子类来创建对象。
也就是说,抽象类是不能用new运算符来创建实例对象的类,它可以作为父类被它的所有子类
所共享 。
13.抽象类与抽象方法:
抽象类是以修饰符abstract修饰的类。抽象类的语法格式:
abstract class 类名{
声明成员变量;
返回值的数据类型 方法名 (参数表);
{
...}
abstract 返回值的数据类型 方法名(参数表);}----抽象方法。在抽象方法里,不能定义方法体
}
14.说明:在抽象类中的方法分为两种:一种是以前介绍的带有方法体的一般方法,另一种是
没有方法体的 “抽象方法”,它是abstract关键字开头的方法,此方法只能声明返回值的
数据类型、方法名称与所需要的参数,但没有方法体。也是说,对抽象方法只需要,而不需要
实现,即用“;”结尾,而不用“{}”结尾。当一种方法声明为抽象方法时,意味着这种方法
必须被子类的方法所覆盖,否则子类依然是抽象的。抽象方法声明中修饰符static和abstract
不能同时使用
15.抽象类的子类必须实现父类中的所有抽象方法,或者将自己也声明为抽象的
16.注意:1)由于抽象类是需要被继承,所以抽象类不能用final来修饰。也就是说,一个类
不能既是最终类又是抽象类,即关键字abstract与final不能合用
2)abstract不能与private、static、final或native并列修饰同一种方法
17.抽象类中不一定包含抽象方法,但包含抽象方法的类一定要声明为抽象类。
抽象类本身不具备 实际的功能,只能用于派生其子类,而声明为抽象方法必须必须在子类派生
时被覆盖。所以说一个类被定义为抽象类,则该类就不能用new运算符创建具体实例创建具体
实例对象,而必须通过覆盖的方式实现抽象类中的方法。
18.抽象类可以有构造方法,且构造方法可以被子类的构造方法调用,但构造方法不能被声明为
抽象的。由于不能用于抽象类

总结:今天学习了不可继承类,防止被子类覆盖

学习了object的getName方法返回类名,getClass返回类名,instanceof运算符判断类

抽象类子类不能实现实际功能,由子类实现。可以有构造方法,且被子类构造方法调用,但构造方法不能被声明抽象