抽象类(abstract)及接口(interface)试例

原创 2016年08月31日 10:13:12

一、抽象类(abstract)

自上而下的继承层次结构,作为派生其他类的基类。使用extends继承,可以进行扩展,具有通用性。包含一个或多个抽象方法的类本身必须被声名为抽象的。抽象类中可以包含具体数据和具体方法,抽象类不能直接被实例化。

意义:例如person抽象类,可以包含个人的基本信息域(姓名,年龄,性别......),及其设置、获取的方法。现在我们需要创建不同行业的人的信息,可以统统继承person抽象类。对于不同行业的人描述信息不一样,所以可以定义一个getDescription()用于返回描述信息,其实现交给实现此抽象方法的子类   例子:

新建Person抽象类(我的抽象类放在com.inter包的Person.java中):

package com.inter;

public abstract class Person {
	public Person(String name){
		this.name = name;
	}
	
	public String getName(){
		return name;
	}
	
	public abstract void getDescription();//定义抽象方法
	private String name;

}


新建Student类,用于实现Person抽象类(我放在com.bean包的Student,java中):
package com.bean;

import com.inter.*;

public class Student extends Person{	
	public Student(String name,int tall){
		super(name);//调用父类的构造方法
		this.tall = tall;
	}
	
	public int getTall(){
		return tall;
	}
	
	public void getDescription(){
		System.out.println("攻城狮:"+this.getName()+"\n身高:"+this.getTall()+"cm");
	}
	
	private int tall;
}

1、在主类中直接测试抽象类(我的放在com.test包的test.java下)

package com.test;  

import com.bean.*;
  
public class test {  
    public static void main(String[] args){
        Student s = new Student("小卓",165);
        s.getDescription();
    }
}

运行显示:

攻城狮:小卓

身高:165cm


2、使用spring测试:

编辑applicationContext.xml配置文档在项目的src下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

 	<bean id="student" class="com.bean.Student">
 		<constructor-arg index="0">
 			<value>小卓</value>
 		</constructor-arg>
 		<constructor-arg index="1">
 			<value>165</value>
 		</constructor-arg>
 	</bean>
</beans>

在主类中:
package com.test;  
  
import org.springframework.context.ApplicationContext;  

import org.springframework.context.support.FileSystemXmlApplicationContext;  
import com.bean.*;
  
public class test {  
    public static void main(String[] args){
        ApplicationContext ac=new FileSystemXmlApplicationContext("src/applicationContext.xml");//利用文件系统查询applicationContext.xml配置文件  
        
        Student s = (Student)ac.getBean("student");
        s.getDescription();
    }
}
运行结果同1


二、接口(interface)

接口中的所有方法自动属于public,所以声名方法时不用提供public关键字。接口中还有一个没有明确说明的附加要求:在调用x.compareTo(y)时返回一个数(java.lang.comparable)。接口中不能含有实例域也不能在接口中实现方法,但是可以有常量。接口可以被另一个接口所扩展,实现接口的类必须实现接口的所有方法。例子:

java.lang.Comparable<T>中的泛型接口Comparable<>,其代码如下:

public interface Comparable<T>{
       int compareTo(T other);
}

要实现该接口就必须实现compareTo方法,要想对类进行排序就必须实现compareTo方法,修改上面的Student类:

package com.bean;

import com.inter.Person;

public class Student extends Person implements Comparable<Student>{	
	public Student(String name,int tall){
		super(name);//调用父类的构造方法
		this.tall = tall;
	}
	
	public int getTall(){
		return tall;
	}
	
	public void getDescription(){
		System.out.println("攻城狮:"+this.getName()+"\n身高:"+this.getTall()+"cm");
	}
	
	public int compareTo(Student other) {
		if(this.getTall() > other.getTall()) return 1;
		if(this.getTall() < other.getTall()) return -1;
		return 0;
	}
	
	private int tall;
}

修改applicationContext.xml配置文档:

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

 	<bean id="beauty" class="com.bean.HelloBeauty"></bean>
 	<bean id="student" class="com.bean.Student">
 		<constructor-arg index="0">
 			<value>小牛</value>
 		</constructor-arg>
 		<constructor-arg index="1">
 			<value>165</value>
 		</constructor-arg>
 	</bean>
 	<bean id="student2" class="com.bean.Student">
 		<constructor-arg index="0">
 			<value>小驴</value>
 		</constructor-arg>
 		<constructor-arg index="1">
 			<value>175</value>
 		</constructor-arg>
 	</bean>
 	<bean id="student3" class="com.bean.Student">
 		<constructor-arg index="0">
 			<value>小鸡</value>
 		</constructor-arg>
 		<constructor-arg index="1">
 			<value>179</value>
 		</constructor-arg>
 	</bean>
</beans>

修改主类:

package com.test;  
  
import java.util.Arrays;

import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.FileSystemXmlApplicationContext;  

import com.bean.*;
  
public class test {  
    public static void main(String[] args){
        ApplicationContext ac=new FileSystemXmlApplicationContext("src/applicationContext.xml");//利用文件系统查询applicationContext.xml配置文件
        
        Student[] student =new Student[3];
        student[0] = (Student)ac.getBean("student");
        student[1] = (Student)ac.getBean("student2");
        student[2] = (Student)ac.getBean("student3");
        Arrays.sort(student);
        for(Student s:student){
        	s.getDescription();
        	System.out.println("----------------");
        }
    }
}

运行结果:

攻城狮:小牛
身高:165cm
----------------
攻城狮:小驴
身高:175cm
----------------
攻城狮:小鸡
身高:179cm
----------------

小结:每个类只能扩展于一个类(abstract),当想要扩展多个类的时候就要用到接口(interface)例如上面的student类:

public class Student extends Person implements Comparable<Student>{}

假如有个A接口:public interface A{}

还可以  public class Student extends Person implements Comparable<Student>,A{}

接口可用于解决多继承问题。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

抽象类(Abstract) && 接口(Interface)区别比较

第一个区别(变量&常量&修饰符)   新建抽象类AbstractTest: publicabstractclassAbstractTest{               String name; ...
  • wd1929
  • wd1929
  • 2015年09月06日 22:49
  • 228

java学习笔记-抽象类abstract与接口interface

/** * abstract 是修饰符可以修饰类,函数 * 当我们在多个类有相同功能的时候,而功能的主体不同,我们应该向上抽取只抽取功能的定义不抽取功能的主体 * 抽象类的特点: * 1.抽象...

黑马程序员-抽象类abstract class 与 接口interface 的区别

l 从特性来看 1. 抽象类:含有抽象方法的类只能定义成抽象类。 抽象类不能被实例化,也即不能使用new关键字来实例化抽象类。 2. 接口:是一个完全抽象了的类,没有任何东西可以被子类来继承了。   ...

Java中的抽象类和接口 (Abstract Class and Interface in Java)

转自:http://blog.csdn.net/b271737818/article/details/3950245 在Java语言中,abstract class和interface是支持抽象类定...

java 接口interface和抽象类abstract class 之间的区别

Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,他们的区别如下: 1 Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Ja...
  • rually
  • rually
  • 2014年12月13日 20:14
  • 591

Java抽象类(abstract)和接口(interface)的区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和inter...

接口和抽象类 , Interface and abstract class

《由浅入深学C#》,添加了一些必要的注释,只是希望能够帮你读懂,顺便自己留着参考。 接口 ==》 只有方法没有实现; 格式: [attributes] [modifiers] inter...

Java抽象类(abstract class)和接口(interface)的区别

理解这篇文章的必要条件是:对面向对象基本概念的准确且深刻理解、高度的抽象思维能力!能写出这样文章的作者水平是相当高的!——博主注释 abstract class和interface是Java语言中对于...
  • zdl543
  • zdl543
  • 2014年01月07日 17:39
  • 390

PHP中的 抽象类(abstract class)和 接口(interface)

一、 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类。 ...

【JavaLearning】接口与抽象类的比较(The comparison of Interface and Abstract Class )

【Section one】Abstract     近来,在学习Java的过程中遇到了一个新的概念(本人有C/C++开发基础)——接口(Interface),这个概念在C++中并不存在,因此,不由得一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象类(abstract)及接口(interface)试例
举报原因:
原因补充:

(最多只允许输入30个字)