java学习笔记2
(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) ); } }