(1)final 关键字
在 Java 中声明类、属性和方法时,可使用关键字 final 来修饰。
1、 final 标记的类不能被继承。
2、 final 标记的方法不能被子类复写。
3、 final 标记的变量(成员变量或局部变量)即为常量,只能赋值一次
(2) 接口(interface)
接口(interface)是 Java 所提供的另一种重要技术,它的结构和抽象类非常相似,也具有数据成员与抽象方法,但它与抽象类又有以下两点不同:
1、接口里的数据成员必须初始化,且数据成员均为常量。
2、接口里的方法必须全部声明为 abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法” 。
interface 接口名称 // 定义抽象类
{
final 数据类型成员名称 = 常量 ; // 数据成员必须赋初值
abstract 返回值的数据类型方法名称(参数…) ;
// 抽象方法,注意在抽象方法里,没有定义方法主体。
}
接口是 java 实现多继承的一种机制,一个类只能继承一个父类,但如果需要一个类继承多个抽象方法的话,就明显无法实现,所以就出现了接口的概念。一个类只
可以继承一个父类,但却可以实现多个接口。接口与一般类一样,均可通过扩展的技术来派生出新的接口。原来的接口称为基本接口或父接口,派生出的接口称为派生接口或子接口。通过这种机制,派生接口不仅可以保留父接口的成员,同时也可加入新的成员以满足实际的需要
下面是接口实现的一个实例,注意观察它和继承的不同
public interface A {
inti = 10 ;
publicabstract void sayi();
}
public interface E {
intx = 40;
public abstract void SayE();
}
public interface j {
intj = 40;
public abstract void Sayj();
}
public class C implements B {
publicvoid sayi() {
System.out.println("i="+ i);
}
publicvoid SayE() {
System.out.println("x"+ x);
}
publicvoid sayj() {
System.out.println("j="+j);
}
}
public class Infaced {
publicstatic void main(String[] args)
{
C c = new C();
c.sayi();
c.sayj();
c.SayE();
}
}
从此程序中可以发现与类的继承不同的是,一个接口可以同时继承多个接口,也就是同时继承了多个接口的抽象方法与常量。
(3)多态性
1 向上转型:
父类对象通过子类对象去实例化,实际上就是对象的向上转型。向上转型是不需要进行强制类型转换的,但是向上转型会丢失精度。
2 向下转型:
与向上转型对应的一个概念就是“向下转型” ,所谓向下转型,也就是说父类的对象可以转换为子类对象,但是需要注意的是,这时则必须要进行强制的类型转换。
注意:向上转型可以自动完成;向下转型必须进行强制类型转换
向下转型简单实例
public class person {
publicvoid fun1()
{
System.out.println("1 personfun1");
}
publicvoid fun2()
{
System.out.println("2 personfun2");
}
}
public class student extends person{
publicvoid fun1()
{
System.out.println("3 studetnfun3");
}
publicvoid fun4()
{
System.out.println("4 personfun1");
}
}
public class testdemo {
publicstatic void main(String[] args) {
person p = new student();
student s = (student)p;
s.fun1();
s.fun2();
s.fun4();
}
}
(4)instanceof 关键字的使用
用 instanceof 判断一个类是否实现了某个接口,也可以用它来判断一个实
例对象是否属于一个类。
对象 instanceof 类(或接口)
它的返回值是布尔型的,或真(true)、或假(false)。
(5)复写 Object 类中的 equals 方法
Object 类中有一个 equals 方法,此方法用于比较对象是否相等,而且此方法必须被复写
首先要明确==和equals的区别==比较的是2个对象的地址,而equals比较的是2个对象的内容
下面给出一个复写equals方法的例子
public class person1 {
privateString name;
privateint age ;
public person1(String name,int age)
{
this.name = name ;
this.age = age;
}
public boolean equals(Object o)
{
boolean temp = true;
person1 p1 = this ;
if(o instanceof person1 )
{
person1 p2 = (person1)o;
if( !(p1.name.equals(p2.name) &&p1.age==(p2.age) ) )
{
temp = false;
}
}
else
temp =false;
return temp;
}
}
public class overequals {
publicstatic void main(String[] args){
person1p1 = new person1("张三", 10);
person1p2 = new person1("张三",10);
System.out.print(p1.equals(p2) );
}
}