Java中的instanceof关键字可以用来判断某一个对象是不是某一个类是实例。如果是,返回true;如果不是,返回false;如果二者无关,则编译不通过。
示例:
package com.wmwx.oop; import com.wmwx.oop.Demo06.Person; import com.wmwx.oop.Demo06.Student; import com.wmwx.oop.Demo06.Teacher; //启动类 public class Application { public static void main(String[] args) { //继承关系如下: //Object -> Person -> Student //Object -> Person -> Teacher //Object -> String Object object = new Student(); System.out.println(object instanceof Student); //输出true System.out.println(object instanceof Person); //输出true System.out.println(object instanceof Object); //输出true System.out.println(object instanceof Teacher); //输出false System.out.println(object instanceof String); //输出false System.out.println("====="); Person person = new Student(); System.out.println(person instanceof Student); //输出true System.out.println(person instanceof Person); //输出true System.out.println(person instanceof Object); //输出true System.out.println(person instanceof Teacher); //输出false //System.out.println(person instanceof String); //编译时报错 System.out.println("====="); Student student = new Student(); System.out.println(student instanceof Student); //输出true System.out.println(student instanceof Person); //输出true System.out.println(student instanceof Object); //输出true //System.out.println(student instanceof Teacher);//编译时报错 //System.out.println(student instanceof String); //编译时报错 } } 类型转换子类转换为父类,是向上转型,可自动转换。
父类转换为子类,是向下转型,需强制转换。
示例:
Person类:
package com.wmwx.oop.Demo06; public class Person { public void run(){ System.out.println("人在跑步。"); } }Student类:
package com.wmwx.oop.Demo06; public class Student extends Person{ public void walk(){ System.out.println("学生在走路。"); } }Application类:
package com.wmwx.oop; import com.wmwx.oop.Demo06.Person; import com.wmwx.oop.Demo06.Student; //启动类 public class Application { public static void main(String[] args) { //高 ----------------- 低 Person person = new Student(); ((Student)person).walk(); //强制类型转换 Student student = new Student(); Person obj = student; //子类转换为父类,可能会丢失一些方法 //obj.walk(); //编译时报错 } } 静态代码块静态代码块会在类加载时执行,且只会执行一次。
示例:
Person类:
package com.wmwx.oop.Demo07; public class Person { //第二个执行,可在这里赋初始值 { System.out.println("匿名代码块"); } //第一个执行,只执行一次 static { System.out.println("静态代码块"); } //第三个执行 public Person() { System.out.println("构造方法"); } }Application类:
package com.wmwx.oop; import com.wmwx.oop.Demo07.Person; //启动类 public class Application { public static void main(String[] args) { Person person = new Person(); //第一行输出"静态代码块" //第二行输出"匿名代码块" //第三行输出"构造方法" } } 抽象类在Java语言中使用abstract 来定义抽象类,其基本语法如下:
abstract class 类名{ //属性 //方法 }抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。在Java中一个类只能继承一个抽象类,但一个类可以实现多个接口。
在Java语言中使用abstract 来定义抽象方法,其基本语法如下:
abstract 访问修饰符 返回值类型 方法名(参数);抽象类与抽象方法的规则:
抽象类不能被实例化(即不能被 new ),只有抽象类的非抽象子类可以创建对象。
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类中的抽象方法只是声明,不包含方法体,也就是不给出方法的具体实现。
构造方法、类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
示例: