抽象类和接口的基本概念 推荐
2008-08-05 17:19
302 查看
3.1、抽象类
抽象类实际上也是一个类,只是与之前的普通类相比,在抽象类中多了抽象方法。抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,包含抽象方法的类也必须使用abstract class声明。
一个抽象类的定义
abstract class A{ private String name = "WWW" ; public void fun(){ // 此处定义了一个普通方法 System.out.println("Hello World!!!") ; } public abstract void print() ;[/b] }; |
如果对抽象方法直接实例化,则会出现无法实例化的错误。
abstract class A{ private String name = "WWW" ; public void fun(){ // 此处定义了一个普通方法 System.out.println("Hello World!!!") ; } public abstract void print() ; }; public class Demo01{ public static void main(String args[]){ A a = new A() ;[/b] } }; |
1、 抽象类必须有子类,抽象类必须被继承
2、 抽象类的子类如果不是抽象类的话,则必须覆写里面的全部抽象方法。
3、 抽象类不能直接实例化,必须依靠子类完成。
进一步完善之前的程序:
abstract class A{ private String name = "WWW" ; public void fun(){ // 此处定义了一个普通方法 System.out.println("Hello World!!!") ; } public abstract void print() ; }; class B extends A{ // 覆写抽象方法 public void print(){ System.out.println("**********************") ; } }; public class Demo02{ public static void main(String args[]){ B b = new B() ; b.print() ; b.fun() ; } }; |
1、 能否用final修饰一个抽象类呢?
· 因为抽象类必须被子类继承,而被final修饰的类不能有子类。所以不能
2、 抽象类中能否有构造方法呢?可以有
abstract class Person{ private String name ; private int age ; // 单独按一个类来说,应该可以直接在构造方法中初始化 public Person(String name,int age){[/b] this.name = name ;[/b] this.age = age ;[/b] }[/b] public abstract String getInfo() ; public String getName(){ return this.name ; } public int getAge(){ return this.age ; } }; class Student extends Person{ private String school ; public Student(String name,int age,String school){ super(name,age) ;[/b] this.school = school ; } public String getInfo(){ return "姓名:"+super.getName()+",年龄:"+super.getAge()+",学校:"+this.school ; } }; public class Demo03{ public static void main(String args[]){ Student stu = new Student("张三",30,"北京大学") ; System.out.println(stu.getInfo()) ; } }; |
回顾:[/b]子类对象的实例化过程
· 子类对象实例化的时候默认会先去调用父类中的无参构造方法,如果父类中没有无参构造,则可以通过super指定调用父类中的其他构造方法。
注意:[/b]
一个类只可以继承一个抽象类,属于单继承。
3.2、接口
[/b]接口定义:[/b]· 只包含抽象方法和全局常量的类称为接口。
· 接口使用interface进行定义。
interface A{ public static final String INFO = "HELLO" ; public abstract void print() ; } |
class 子类 implements 接口名称{}
接口的子类如果不是抽象类的话,则也必须覆写里面的全部抽象方法。
interface A{ public static final String INFO = "HELLO" ; public abstract void print() ; } class B implements A{ public void print(){ System.out.println(INFO) ; } }; public class Demo04{ public static void main(String args[]){ B b = new B() ; b.print() ; } }; |
class 子类 implements 接口A,接口B
interface A{ public static final String INFO = "HELLO" ; public abstract void print() ; } interface C{ public static final String PARAM = "WWW" ; public abstract void fun() ; } class B implements A,C{ public void print(){ System.out.println(INFO) ; } public void fun(){ System.out.println(PARAM) ; } }; public class Demo05{ public static void main(String args[]){ B b = new B() ; b.print() ; b.fun() ; } }; |
既然,接口中的一切方法都是抽象方法,接口中的一切变量都是全局常量,那么实际上接口就可以简化成如下的形式定义。
interface A{ // public static final String INFO = "HELLO" ; String INFO = "HELLO" ; // public abstract void print() ; void print() ; //à 此处虽然没有明确的写出权限,但实际上权限是public[/b] } |
public void print() ;[/b]
那么如果一个类继承继承一个抽象类又要实现一个接口,则必须按照以下格式完成:
class 子类 extends 父类(一般都是抽象类) implements 接口A,接口B
interface A{ // public static final String INFO = "HELLO" ; String INFO = "HELLO" ; // public abstract void print() ; void print() ; } abstract class X{ public String param = "hello" ; abstract void fun() ; }; class B extends X implements A{ public void print(){ System.out.println(INFO) ; } void fun(){ System.out.println(INFO) ; System.out.println(param) ; } }; public class Demo07{ public static void main(String args[]){ B b = new B() ; b.print() ; } }; |
开发原则:[/b]
在开发中一定要记住,一个类往往很少去继承一个已经实现好的类,即:普通类之间不能互相继承。
注意点:[/b]
1、 一个抽象类可以实现多个接口,但是一个接口不能继承一个抽象类。
interface A{ // public static final String INFO = "HELLO" ; String INFO = "HELLO" ; // public abstract void print() ; void print() ; } abstract class X implements A[/b]{ public String param = "hello" ; abstract void fun() ; }; |
interface 子接口 extends 父接口A,父接口B,父接口C
interface A{ public void printA() ; } interface B{ public void printB() ; } interface C{ public void printC() ; } interface X extends A,B,C{ public void printX() ; }; class Y implements X{ public void printA(){} public void printB(){} public void printC(){} public void printX() ; }; |
相关文章推荐
- 基本概念的澄清 1。抽象类与接口在设计时各有什么好处? 2。静态方法与实例方法的区别(论坛帖抽取)
- 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)
- java学习笔记(3)基本概念之抽象类和接口
- 接口,抽象类,实体类----------回忆一下基本概念
- Java基本概念-抽象类和接口
- 抽象类和接口的基本概念及演示
- JAVA基础--接口的概念、分类及与抽象类的区别
- Java面向对象高级--抽象类的基本概念------abstract
- JAVA 继承基本类、抽象类、接口
- C#学习基本概念之接口属性
- 浅析php中抽象类和接口的概念以及区别[转]
- Java学习笔记56. 接口的基本概念与使用
- Java中抽象类和接口在概念、语法和应用上的区别和关系
- JAVA 继承基本类、抽象类、接口介绍
- 抽象类的概念,抽象类与接口的区别
- Razor视图引擎布局 Razor视图引擎的基本概念与法语 SQL Server Mobile 和 .NET 数据访问接口之间的数据类型映射 binary 和 varbinary datetime 和 smalldatetime float 和 real
- c#接口和抽象类的一些概念
- 接口和抽象类概念和区别
- JAVA 继承基本类、抽象类、接口
- 集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念