zoukankan      html  css  js  c++  java
  • java中的接口和抽象类

    1.抽象类

    如果一个类含有抽象方法,则称这个类为抽象类。抽象方法用关键字abstract修饰,只有声明,而没有具体的实现。

    定义一个抽象类:

    abstract class AbstractTest{
    	//抽象类中的成员变量默认为default,也可以被public,protected,private修饰,可以不用赋初值。
    	int a=2;
    	public int b;
    	protected int d;
    	private int c;
    	//抽象类中的方法不可以被default修饰
    	abstract void m1();
    	public void m2(){
    		//方法体
    	}
    	protected void m3(){
    		//方法体
    	};
    	private void m4(){
    		//方法体
    	}
    }
    
    • 抽象类中的成员变量默认为default,也可以被public,protected,private修饰,可以不用赋初值,这些成员变量可以在子类中被重新定义,也可以重新赋初值。
    • 抽象类中除了有抽象方法之外(抽象方法的权限修饰符只能为public和protected),也可以含有被public,protected,private修饰的成员方法。抽象类中的成员方法不能被default修饰。
    • 子类继承抽象类时,必须重写抽象类中的抽象方法。如果子类没有实现父类中的抽象方法,则必须将子类也定义为abstract类。

    抽象类就是为了继承而存在的,对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需要来进行不同的实现,就可以将这个方法声明为abstract方法,包含abstract方法的类也就是抽象类了。

    2.接口

    接口用关键字interface修饰,定义接口:

    interface Interface1{                                                                                                                    
    	//成员变量字段修饰符public static final,必须初始化且其值不能被改变。
    	public static final int a=3;
    	//成员变量修饰符可以省略public static final;
    	int b=10;
    	//接口中的方法修饰为public和abstract,且没有方法体。
    	abstract void print(String str);
    	public void add(int n1,int n2);
    }
    
    • 接口中可以有成员变量与成员方法,成员变量隐式指定为public static final,只能是public static final修饰,使用private修饰会报错,并且可以省略,但是一般情况下不在接口中定义变量。
    • 接口中的成员方法可以修饰为public或abstract,且没有具体的实现。
    • 子类实现接口时必须实现接口中的所有方法。

    3.接口不可以被实例化,但是接口引用可以指向一个实现该接口的对象,抽象类同理。

    package zhishidian;
    
    import org.junit.Test;
    
    abstract class AbstractTest{
    	//抽象类中的成员变量默认为default,也可以被public,protected,private修饰,可以不用赋初值。
    	int a=2;
    	public int b;
    	protected int d;
    	private int c;
    	//抽象类中的成员方法不可以被default修饰,抽象方法的权限修饰符为public和protected;
    	public abstract void m1();
    	protected abstract void m5();
    	public void m2(){
    		//方法体
    	}
    	protected void m3(){
    		//方法体
    	};
    	private void m4(){
    		//方法体
    	}
    }
    
    //接口修饰符关键字interface
    interface Interface1{                                                                                                                    
    	//成员变量字段修饰符public static final,必须初始化且其值不能被改变。
    	public static final int a=3;
    	//成员变量修饰符可以省略public static final;
    	int b=10;
    	//接口中的方法修饰为public或abstract,且没有方法体。
    	abstract void print(String str);
    	public void add(int n1,int n2);
    }
    
    public class InterfaceTest extends AbstractTest implements Interface1{
    	public static final int a=4;
    	@Test
    	public void test(){
    		//接口不可以被实例化,但是接口引用可以指向一个实现该接口的对象,抽象类同理。
    		Interface1 a1=new InterfaceTest();
    		AbstractTest at=new InterfaceTest();
    		a1.print("hello");
    		a1.add(2,3);
    		InterfaceTest it=new InterfaceTest();
    		System.out.println("本类中的变量a:"+it.a);
    		System.out.println("接口中的变量a:"+Interface1.a);
    		System.out.println("父类中的变量a:"+super.a);
    	}
    	//实现接口的类必须实现接口中定义的方法,继承抽象类时必须实现抽象类中的抽象方法。
    	@Override
    	public void print(String str) {
    		System.out.println(str);
    	}
    	@Override
    	public void add(int n1, int n2) {
    		System.out.println(n1+n2);
    	}
    	@Override
    	public void m1() {
    		//方法体
    	}
    	@Override
    	protected void m5() {
    		//方法体
    	}
    }
    
    未经授权,不得转载!
  • 相关阅读:
    JavaFX 1.2 SDK 发布,增加 Linux 及 OpenSolaris 支持
    JSF 2.0 通过最终投票
    NetBeans 时事通讯(刊号 # 57 May 27, 2009)
    “C语言” 读书札记(六)之[Linux下C语言编程环境Make命令和Makefile] 川山甲 博客园
    [转]宽字符的介绍
    【语法回顾】C++STL:string类型 ATP_ 博客园
    Using the C/C++ Garbage Collection Library, libgc
    Makefile学习笔记 我的CPP之路 C++博客
    伍迷创意随想集 之 杯具拥有个性,个性成就杯具 伍迷 博客园
    知哈希算法——找出相似的图片
  • 原文地址:https://www.cnblogs.com/bluetree2/p/10813873.html
Copyright © 2011-2022 走看看