Java入门——抽象类和接口的基本概念
本blog内容:
- 抽象类的基本概念(重点)
- 接口的基本概念(重点)
- 对象的多态性(重点)
- instanceof关键字
开始本blog时间:
2016-09-16 16:21:09
抽象类的基本概念(重点)
包含一个抽象方法的类一定是抽象类
抽象类和抽象方法都要使用abstract关键字定义
抽象方法只需要声明,不需要实现
抽象类必须被继承,子类必须复写全部抽象方法
1 package Sep13; 2 3 public class AbstractClass { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 B b=new B(); 11 b.print(); 12 } 13 14 } 15 abstract class A{//定义抽象类 16 public static final String FLAG="CHINA"; 17 private String name; 18 public String getName() { 19 return name; 20 } 21 public void setName(String name) { 22 this.name = name; 23 } 24 public abstract void print();//若在接口中可以省略abstract关键字 25 } 26 class B extends A{//继承抽象类 27 public void print(){ 28 System.out.println("flag="+FLAG); 29 System.out.println("姓名="+super.getName()); 30 31 } 32 }
flag=CHINA 姓名=null
接口的基本概念(重点)
是一种特殊的类,是由全局常量和公共的抽象方法(必须是public,可以省略)组成的。一个类可以实现多个接口,实际上也就摆脱了Java单继承的限制。
1:类实现接口 class 类 implements 接口A,接口B{ } 2:继承抽象类实现接口 class 子类 extends 抽象类 implements 接口A,接口B,{ } 3:接口的继承 interface 子接口 extends 父接口A,父接口B{}
对象的多态性
(1)方法的重载与覆写
(2)对象的多态性
对象向上转型:父类 父类对象 =子类实例(自动完成) 对象向下转型:子类 子类对象=(子类)父类实例
1 public class Wine { 2 public void fun1(){ 3 System.out.println("Wine 的Fun....."); 4 fun2(); 5 } 6 7 public void fun2(){ 8 System.out.println("Wine 的Fun2..."); 9 } 10 } 11 12 public class JNC extends Wine{ 13 /** 14 * @desc 子类重载父类方法 15 * 父类中不存在该方法,向上转型后,父类是不能引用该方法的 16 * @param a 17 * @return void 18 */ 19 public void fun1(String a){ 20 System.out.println("JNC 的 Fun1..."); 21 fun2(); 22 } 23 24 /** 25 * 子类重写父类方法 26 * 指向子类的父类引用调用fun2时,必定是调用该方法 27 */ 28 public void fun2(){ 29 System.out.println("JNC 的Fun2..."); 30 } 31 } 32 33 public class Test { 34 public static void main(String[] args) { 35 Wine a = new JNC(); 36 a.fun1(); 37 } 38 } 39 ------------------------------------------------- 40 Output: 41 Wine 的Fun..... 42 JNC 的Fun2...
参见:http://www.cnblogs.com/chenssy/p/3372798.html
总结:向上转型:执行所指向的子类中的方法。但是前提是父类中定义的该方法,如果父类中没有子类中的方法,则无法引用该方法,换言之:子类重写的方法可以应用,子类重载或重新定义的方法,无法引用。
instanceof关键字
在Java中使用instanceof关键字判断一个对象到底是那个类的实例,格式如下所示:
1 package Sep16; 2 3 public class instanceofDemo { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 A a1=new B();//通过向上转型实例化A类对象 11 System.out.println("A a1=new B():"+" "+(a1 instanceof A)); 12 System.out.println("A a1=new B():"+" "+(a1 instanceof B)); 13 A a2=new A();//直接实例化A类对象 14 System.out.println("A a2=new A():"+" "+(a2 instanceof A)); 15 System.out.println("A a2=new A():"+" "+(a2 instanceof B)); 16 } 17 18 } 19 class A{ 20 public void fun1(){ 21 System.out.println("A---->public void fun1(){}"); 22 } 23 public void fun2(){ 24 this.fun1(); 25 } 26 } 27 class B extends A{ 28 public void fun1(){ 29 System.out.println("B---->public void fun1(){}"); 30 } 31 public void fun3(){ 32 System.out.println("B---->public void fun3(){}"); 33 } 34 }
A a1=new B(): true A a1=new B(): true//向上转型的实例化对象即是A类对象,也是B类对象 A a2=new A(): true A a2=new A(): false