java语言基础之关键字2(abstract、interface、implements、instanceof)

关键字abstract

其特点:

1、用abstract关键字修饰的函数时抽象函数

2、类内有抽象函数(或抽象方法)的类为抽象类,类必须要用abstract修饰

3、抽象类不能被实例化,也就是不能用来创建对象(new...)

4、抽象类的子类必须覆盖实现父类中的抽象函数。也就是说abstract的类需要子类来重写方法

5、抽象类可以有构造函数,当被继承的时候,子类会用super()调用父类的构造函数

注意:抽象(方法、变量)不能被final或private(这样就无法继承父类了)修饰;

          抽象方法不能被static修饰,因为static修饰的方法可以直接调用类名来实例化,这当然是不可能的

package Training;
abstract class fu{
	public abstract void show();
	public  void method() {
		System.out.println("我是构造方法!");
	}
}
class Zi extends fu{
	//super();
	public void show() {
		System.out.println("---------zi()-----------");
	}
}
public class ABC {
     public static void main(String[] args) {
    	 Zi z = new Zi();
    	 z.show();///抽象类通过子类来实现实例化
    	 z.method();
     }
}

  

1 ---------zi()-----------
2 我是构造方法!
View Code

 关键字interface和implements

接口:如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是 public 权限的 

用法:接口使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,且必须完全实现。

接口使用规则:       

      1.类中全部为抽象方法。

      2.抽象方法钱不用加abstract。

      3.接口抽象方法属性为public。

      4.成员属性必须为常量。

 接口与继承的区别:继承(extends)是单一性的,只能单单继承一个父类,而接口使用关键字 implements 多个引用并用逗号分开(引用多个interface修饰的类)

接口各种用法:

1.普通类引用接口

class Zi implements Fu1,Fu2,.....{
	...
}

2.抽象类应用接口

与1同理,但在class前加abstract

3.继承父类引用接口

class Zi extends Fu implements Fu1,Fu2,...{
	...
}

4.接口与接口的继承
interface Fu1 extends Fu2{
	...
}

Fu1,Fu2都为接口

接口与抽象类的区别:

      1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。

      2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。

      3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

关键字instanceof

特点:

1、instanceof关键字是在Java类中实现equals方法最常使用的关键字,表示其左边的对象是否是右边类型的实例,这里右边的类型可以扩展到继承、实现结构中,可以是其真实类型,或者真实类型的超类型、超接口类型等。

2、instanceof左边必须是对象实例或者null类型,否则无法通过编译。

3、instanceof右边必须是左边对象的可转换类型(可强转),否则无法通过编译。

4、instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

5、instanceof左边必须为引用类型,不能为基本数据类型(如int、double、。。。)。

package Training;

class Fu{
	
}
class Zi extends Fu{
	
}

//接口类
interface  A{
	
}
interface B{
	
}
class C extends Fu implements A,B{
	
}

public class atect {
     public static void main(String [] args) {
    	 Fu f1 = new Fu();
    	 Fu f2 = new Zi();
    	 Zi z = new Zi();
    	 System.out.println(f1 instanceof Zi);//false
    	 System.out.println(f2 instanceof Zi);//true
    	 System.out.println(z instanceof Zi);//true
    	 System.out.println(null instanceof Fu);//false
    	 
    	 System.out.println("------不疯狂就不优秀------");
    	 C c = new C();
    	 System.out.println(c instanceof A);///true
    	 A a = new C();
    	 System.out.println(a instanceof C);//true
     }
}

  

参考资料:https://blog.csdn.net/xnh_565175944/article/details/79896232

                  https://blog.csdn.net/weixin_40096176/article/details/79094991

                  https://www.jb51.net/article/116180.htm

                  https://blog.csdn.net/DYD850804/article/details/81097776

                  http://www.51ui.cn/66/4306186/

 

posted @ 2019-04-20 10:27  wusheng_z  阅读(454)  评论(0编辑  收藏  举报