什么是java抽象类
① java 抽象类是 什么
使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
抽象语法编辑
下面是抽象方法声明时采用的语法:
abstract void f();
如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。
如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract 关键字标志那个类的“抽象”本质。
即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。
2对比接口编辑
语法定义层
在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstract的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。
编程层面
abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
设计理念层面
abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的。 对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(功能)而已。
四、抽象类的示例代码
//: interfaces/music4/Music4.java
// Abstract classes and methods.
/* 抽象类的功能
* 使类的抽象性明确起来
*
*/
// 以下是 抽象类 的示例
package interfaces.music4;
import pets.Pet;
import polymorphism.music.Note;
import static net.mindview.util.Print.*;
/* 1. 抽象方法 abstract void f(); 抽象方法不能包含有任何方法的BODY 。
* 2. 如果一个类包含1个或者多个抽象方法, 则该类必须限定为抽象的。
* 需要在前面指定 abstract 关键字。
* (1)抽象类不能被实例化
* (2)包含抽象方法的类,必须标识 abstract
* 3. 如果从一个抽象类继承, 必须对所有抽象方法进行覆盖 , 否则导出类也是抽象的
* 4. 也可以考虑创建没有任何抽象方法的抽象类 。
*
*/
abstract class Instrument {
// 抽象类中可以有非抽象方法。
private int i; // Storage allocated for each
public abstract void play(Note n);
public String what() { return "Instrument"; }
public abstract void adjust();
}
/*
(2)包含抽象方法的类,必须标识 abstract, 否则编译器会报错
class abc
{
public abstract void Demo();
}*/
class Wind extends Instrument {
public void play(Note n) {
print("Wind.play() " + n);
}
public String what() { return "Wind"; }
public void adjust() {}
}
class Percussion extends Instrument {
public void play(Note n) {
print("Percussion.play() " + n);
}
public String what() { return "Percussion"; }
public void adjust() {}
}
class Stringed extends Instrument {
public void play(Note n) {
print("Stringed.play() " + n);
}
public String what() { return "Stringed"; }
public void adjust() {}
}
class Brass extends Wind {
public void play(Note n) {
print("Brass.play() " + n);
}
public void adjust() { print("Brass.adjust()"); }
}
class Woodwind extends Wind {
public void play(Note n) {
print("Woodwind.play() " + n);
}
public String what() { return "Woodwind"; }
}
class TestAbsExt extends Instrument
{
public void play( Note n ) {
print ("TestAbsExt.play()" + n);
}
public String what()
{
return "TestAbsExt";
}
public void adjust()
{
}
}
// 不含任何抽象方法的抽象类
abstract class AbsClass
{
public void f1() {
print("f1()");
}
public void f2() {
print("f2()");
}
}
public class Music4 {
// Doesn't care about type, so new types
// added to the system still work right:
static void tune(Instrument i) {
// ...
i.play(Note.MIDDLE_C);
}
static void tuneAll(Instrument[] e) {
for(Instrument i : e)
tune(i);
}
public static void main(String[] args) {
// !抽象类不能被实例化
// 若使用以下语句 , 将会收到报错。
/* Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Instructment cannot be resolved to a type
*/
// ! new Instructment();
// Upcasting ring addition to the array:
Instrument[] orchestra = {
new Wind(),
new Percussion(),
new Stringed(),
new Brass(),
new Woodwind()
};
tuneAll(orchestra);
}
} /* Output:
Wind.play() MIDDLE_C
Percussion.play() MIDDLE_C
Stringed.play() MIDDLE_C
Brass.play() MIDDLE_C
Woodwind.play() MIDDLE_C
*///:~
/*
* 抽象方法不能包含有任何方法的BODY 。
*/
/*
abstract class RodentAbs extends Pet {
abstract public Rodent(String name) { super(name); }
abstract public Rodent() { super(); }
} ///:~
*/
② java中抽象类,抽象方法,抽象类是什么意思!实例解说一下! 本人是个刚学习者!
抽象的就是一个没实体的东西。例如人类,这个名词只是指人,但是不是指定具体某一个人。所以这个东东是抽象的。
在Java中抽象的类是用abstract修饰,抽象类里面是有抽象的方法,这些方法是只有一个外壳,没有体。例如有权限修饰符、返回值、方法名、参数。但是就缺少方法体。目的是为了让子类必须重写这个方法,而达到在子类才能实例化这个方法。
还有一个就是抽象类是用abstract修饰,那么这个类就不能实例化。就是说不能用new出来了,会报错的。
③ 在JAVA中什么是抽象类,它有什么特点
有abstract关键字修饰的类为抽象类
格式:
abstract class 类名 {}
特点:
1.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
2.抽象类不能实例化
3.那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类:
1.要么是抽象类
2.要么重写抽象类中的所有抽象方法
④ java中什么是抽象类和抽象方法创建有何作用
使用了关键词abstract声明的类叫作"抽象类"。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。"抽象方法",属于一种不完整的方法,只含有一个声明,没有方法主体。
java抽象类的作用:
1、通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性。
2、接口就是更纯粹的抽象类。
⑤ java中什么是抽象类
由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类。抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构造器生成该类的对象。我们可以使用abstract定义一个抽象类和抽象方法,示例代码如下:
abstract class 类名
{
abstract int 方法名(int x,int y);
}
抽象的方法没有方法体。需要注意的是在抽象类中既可以有抽象方法,也可以有普通方法,注意抽象方法是没有方法体的(也就是方法后面是没有大括号的)。凡是继承这个抽象类的实体子类,都必须要实现这个抽象方法。
我们总结一下抽象类的特点:
(1)抽象类不能被实例化
(2)构造方法 和 static 方法不能是抽象的
(3)父类的抽象方法往往在子类中实现
(4)抽象类可以具有指向子类对象的对象引用
⑥ java中抽象类是什么啊有什么特征啊怎么用啊
抽象类就是在类名前加了修饰符abstract。如果这个类有方法是抽象方法也就是此方法使用abstract修饰的,那么此类就是抽象类。抽象方法没有方法主体,就是没有大括号,直接在小括号后面加分号。如:
public abstract void sayHello();
就是抽象方法。
抽象类就是为了让子类继承的,它表示从一些具体类中抽象出来的类型。
⑦ JAVA中的抽象类
抽象是java的特性之一,也是处理对象复杂性的一种技术!它是指只关注对象的重要细节,忽略次要细节!
在抽象类中定义的抽象方法,是由子类去实现,而不是去覆盖,因为在父类中没有具体的实现!
举一个例子:
父类:
abstract
class
MyClass
{
abstract
void
display(String
str);
}
子类:
abstract
class
MyChild
extends
MyClass
{
void
display(String
str)
{
.....
}
void
method1()
{
....
}
void
method2()
{
....
}
........
}
这个时候我需要用到display方法,其他的都不用!我们可以这样做:
MyClass
mc
=
new
MyChild();
mc.display();
我们声明的是一个父类类型的引用,只需要记住父类中有这个方法的声明,不用管它子类怎么去实现,而且看都不用看method1,method2...我们可以把精力都集中在父类!如果只有一个单纯的子类,很可能需要去看他的其他方法,尤其是当display与其他方法有关联的时候!有了这样一个抽象的父类,就可以省去这些精力,只需要知道父类有这个方法就行了!(或许这些在小程序中体现得并不很明显)
以上都是个人的理解,有不对的地方,还希望大家指正!
⑧ Java抽象类是什么概念
JAVA的抽象类其实和她的普通类在表示实现概念的东西没多大区别,不要因她带有抽象这个形容词就觉得比她的普通类理解起来复杂.
个人的理解是
所谓的抽象类呢,就是带有抽象方法的类.
所谓的抽象方法就像是一种写代码的规范.
抽象方法没有方法体
抽象方法可以有参数列表
抽象方法用abstract修饰
抽象方法的访问修饰分别为 public、protected、default(缺省 不用写)
加深了解抽象类
/*理解JAVA抽象类
* 1.抽象类不能被实例化.
* 2.抽象类有构造器,且他的构造在他的子类被实例化时被调用的顺序和普通类调用的顺序是一样的(先父后子).
* 3.抽象类内部的方法可以不是抽象方法,也就是说抽象类内部可以有具体的方法.
* 4.抽象类的抽象方法属于一种不完整的方法,只含有声明和定义,没有方法主体.
* 5.如果抽象的某个子类是普通类(非abstract类型的类),那么该子类必须Override抽象类中所有的抽象方法.
* 6.抽象类的子类也是抽象类的话,那么该子类既可以Override父类中的方法,也可以不Override父类中的方法.
* 7.普通类中不能定义抽象方法.
* 8.static不能修饰抽象方法
* 备注:为了方便理解,所谓的普通是指如下形式定义的类
* public class X{} 或 class A XX{}
* */
⑨ Java中的抽象类是什么
使用了关键词abstract声明的类叫作“抽象类”。
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体
⑩ java中抽象类 具体是干什么 有什么作用
抽象类、就是一个用abstract修饰的类,在这个类中、你可以定义一些不需要具体实现的方法、也就是没有方法体的方法、这些方法叫做抽象方法、当一个类要继承这个抽象类时、就必须要实现这些抽象方法、。当你在做一个比较复杂的项目时、一些简单的方法就可以马上写出来、但一些复杂的方法、在不同的类中需要不同的实现、那么这个时候就需要用到抽象类的。。。