abstract和接口的基础知识

关系图

在这里插入图片描述

抽象类

什么是抽象类

使用abstract修饰符修饰的类。官方点的定义就是:如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。抽象类可以抽象出重要的行为标准,什么是行为标准呢,例如:speak行为,仅仅说出行为标准,不要说出speak行为具体体现,也不要说speak是用英语说话还是中文说话,这样的行为标准就是抽象方法。抽象类无法实例化,故不能创建对象,因此可以看出抽象类是用来被子类继承的。抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的

抽象类定义

//语法
[修饰符列表] abstract 类名{
}

抽象方法
抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

public abstract void doSome();

抽象方法的特点:
没有方法体,以分号结尾。
前面修饰符列表中有abstract关键词

abstract方法不允许使用final和abstract同时修饰一个方法和类,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。有abstract方法的一定是abstract类,非abstract方法不一定是非abstract类,因为abstract类既可以有abstract方法也可以有非abstract方法。
例子:

abstract class A{  //抽象类
abstract int min(int x,int y);//抽象方法
int max(int x,int y){//非抽象方法
return x>y?x:y;
}
}

为什么不能用fianl和abstract同时修饰一个方法或类呢

前面已经说了抽象类是不能创建对象的,是用来给子类继承的,如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的所以抽象方法,而被fianl修饰的类不能继承,被fianl修饰的方法不能重写,故此时的抽象类毫无用处。

abstract类的子类
如果非abstrct类是abstract类的子类,它必须重写父类所以的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体,如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法也可以不重写父类abstract方法,直接继承父类的abstract方法。

接口

接口定义
使用关键词interface
例如:

interface B{//接口
final int MAX=100;//常量
void add();//抽象方法
}

接口体
只包含常量声明和抽象方法两部分,而且接口体中所有的常量和抽象方法的访问权限一定都是public,而且是static常量(允许省略public、final、和static修饰符),抽象方法(允许省略publlic abstract)
接口基础语法

  • 类与类之间叫继承,类与接口之间叫做实现,但你可以把"实现"看做"实现",继承使用extends关键字完成,实现使用implements关键字完成。
  • 当一个非抽象的类实现接口,必须将接口中所有的抽象方法重写,类在重写方法时不仅要去掉abstrat修饰符,给出方法体,而且方法访问权限一定是用public来修饰的,不可降低访问权限。
  • 接口是一种"引用数据类型"。
  • 接口是完全抽象的 接口是多继承的,一个类可以实现多个接口,用逗号隔开。
  • extends和implements可以共存,extends在前,implements在后

抽象类和接口如何选择

  • 如果子类除了需要重写父类的abstract方法,还需要从父类继承一些变量或继承一些重要非abstract方法,就用抽象类。
  • 如果要创建不带任何方法定义和成员变量的基类,只有抽象方法和常量,就用接口。

抽象类和接口的比较

  • 抽象类和接口都可以有抽象方法。 接口中只可以有常量,不能有变量,而抽象类中既可以有常量,也可以有变量。
  • 抽象类中可以有非抽象方法,接口不可以。
  • 抽象类可以有构造方法,而接口没有。
  • 抽象类可以有main方法所以我们可以运行它,而接口没有我们不能运行它。
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
JAVA基础知识精华总结 收藏 1、 对象的初始化 (1) 静态对象的初始化 在创建对象时,对象所在的所有数据成员会首先进行初始化。 基本型:int型,初始化为0。 如果为对象:这些对象会按顺序初始化。 ※在所有成员初始化完成之后,才调用本的构造方法创建对象。 构造方法的作用就是初始化。 (2) 静态对象的初始化 程序中主的静态变量会在main方法执行前初始化。 不仅第一次创建对象时,中的所有静态变量都初始化,并且第一次访问某(注意此时 未创建此对象)的静态对象时,所有的静态变量也要按它们在中的顺序初始化。 2、 继承时,对象的初始化过程 (1) 主的超由高到低按顺序初始化静态成员,无论静态成员是否为private。 (2) 主静态成员的初始化。 (3) 主的超由高到低进行默认构造方法的调用。注意,在调用每一个超的默认构造 方法前,先进行对此超进行静态对象的初始化。 (4) 主静态成员的初始化。 (5) 调用主的构造方法。 3、 关于构造方法 (1) 可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此时,需要在子类中显式调用父的某一个默认的构造方法了。 (2) 在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的语句必须是 第一条语句。 4、 有关public、private和protected (1) 无public修饰的,可以被其他访问的条件是:a.两个在同一文件中,b.两个 在同一文件夹中,c.两个在同一软件包中。 (2) protected:继承和同一软件包的可访问。 (3) 如果构造方法为private,那么在其他中不能创建该的对象。 5、 抽象 (1) 抽象不能创建对象。 (2) 如果一个中一个方法为抽象方法,则这个必须abstract抽象。 (3) 继承抽象必须实现抽象中的抽象方法。 (4) 抽象中可以有抽象方法,也可有抽象方法。抽象方法不能为private。 (5) 间接继承抽象可以不给出抽象方法的定义。 6、 final关键字 (1) 一个对象是常量,不代表不能转变对象的成员,仍可以其成员进行操作。 (2) 常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中初始化 。 (3) final修饰的方法不能被重置(在子类中不能出现同名方法)。 (4) 如果声明一个为final,则所有的方法均为final,无论其是否被final修饰,但数据 成员可为final也可不是。 7、 接口interface (用implements来实现接口) (1) 接口中的所有数据均为 static和final即静态常量。尽管可以不用这两个关键字修饰 ,但必须给常量赋初值。 (2) 接口中的方法均为public,在实现接口中,实现方法必须可public关键字。 (3) 如果使用public来修饰接口,则接口必须与文件名相同。 8、 多重继承 (1) 一个继承了一个接口,那么必须写在前面,接口写在后面,接口之间用逗 号分隔。 (2) 接口之间可多重继承,注意使用关键字extends。 (3) 一个虽只实现了一个接口,但不仅要实现这个接口的所有方法,还要实现这个接口 继承的接口的方法,接口中的所有方法均须在中实现。 9、 接口的嵌入 (1) 接口嵌入中,可以使用private修饰。此时,接口只能在所在的中实现,其他不 能访问。 (2) 嵌入接口中的接口一定要为public。 10、的嵌入 (1) 可以嵌入另一个中,但不能嵌入接口中。 (2) 在静态方法或其他方法中,不能直接创建内部对象,需通过手段来取得。 手段有两种: class A { class B {} B getB() { B b = new B(); return b; } } static void m() { A a = new A(); A.B ab = a.getB(); // 或者是 A.B ab = a.new B(); } (3) 一个继承了另一个的内部,因为超是内部,而内部的构造方法不能自动 被调用,这样就需要在子类的构造方法中明确的调用超的构造方法。 接上例: class C extends A.B { C() { new A().super(); // 这一句就实现了对内部构造方法的调用。 } } 构造方法也可这样写: C(A a) { a.super(); } // 使用这个构造方法创建对象,要写成C c = new C(a); a是A的对象。 11、异常 JAVA中除了RunTimeException ,其他异常均须捕获或抛出。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cppinside/archive/2004/06/28/28246.aspx

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值