-
2020-06-11 09:20:14
抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。抽象类可以没有抽象方法,甚至可以和普通类一样含有构造方法。当你要求不能创建某个类的实例,只能通过其他类继承这个类来使用时,就可以定义为抽象类。
抽象类中可以没有抽象方法,也可以包含非抽象方法,但有抽象方法的类一定是抽象类。
更多相关内容 -
011 抽象类必须要有抽象方法吗?
2021-02-28 14:53:53抽象类必须要有抽象方法吗?答:不需要,抽象类不一定有抽象方法;但是包含一个抽象方法的类一定是抽象类。(有抽象方法就是抽象类...抽象方法与抽象类:当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重...抽象类必须要有抽象方法吗?
答:不需要,
抽象类不一定有抽象方法;但是包含一个抽象方法的类一定是抽象类。(有抽象方法就是抽象类,是抽象类可以没有抽象方法)
解释:
抽象方法:
java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。
抽象方法与抽象类:
当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。abstract抽象类不能用new实例化对象,abstract方法只允许声明不能实现。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰,当然abstract类也可以没有abstract方法。 一个抽象类里面没有一个抽象方法可用来禁止产生这种类的对象。
Java中的抽象类:
abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
-
抽象类必须要有抽象方法吗?
2019-07-22 14:36:51答案是:不必须。...3.一个类如果包含抽象方法,那么这个类必须是抽象类,否则编译就会报错。 4.最关键的一点就是如果一个类是抽象类,那么这个类是不能被实例化的。 如下: public abstract cl...答案是:不必须。
这个题目主要是考察对抽象类的理解。
说一下我个人的理解吧。
1.如果一个类使用了abstract关键字修饰,那么这个类就是一个抽象类。
2.抽象类可以没有抽象方法
3.一个类如果包含抽象方法,那么这个类必须是抽象类,否则编译就会报错。
4.最关键的一点就是如果一个类是抽象类,那么这个类是不能被实例化的。
如下:
public abstract class MQTest { }
现在user这个类就是一个抽象类,如果直接 使用该类创建新对象是行不通的,编译直接报错。
抽象类只能用其子类(该子类不能是抽象类)去创建新对象。
接下来我就用狗的例子来说明,先创建一个动物类(抽象类),然后创建一个狗类(抽象类),狗下面再分为金毛和二哈(非抽象类)。
动物类:
package com.xingli.abstractDemo; import lombok.Data; /** *@ClassName Animal *@Description 动物抽象类 *@Auther William *@Date 2019/7/22 14:11 *@Version 1.0 */ @Data public abstract class Animal { //定义一个抽象的“让动物叫”的方法 public abstract void say(); }
狗类:
package com.xingli.abstractDemo; /** *@ClassName Dog *@Description 狗类的抽象方法 *@Auther William *@Date 2019/7/22 14:13 *@Version 1.0 */ public abstract class Dog extends Animal{ //默认继承父类的say方法 }
金毛:
package com.xingli.abstractDemo; /** *@ClassName JINMAODog *@Description 金毛 *@Auther William *@Date 2019/7/22 14:16 *@Version 1.0 */ public class JINMAODog extends Dog{ //实现父类的抽象方法 @Override public void say() { System.out.println("金毛:我的名字叫金毛"); } }
二哈:
package com.xingli.abstractDemo; /** *@ClassName ERHADog *@Description 二哈 *@Auther William *@Date 2019/7/22 14:21 *@Version 1.0 */ public class ERHADog extends Dog{ @Override public void say() { System.out.println("二哈:我的名字叫二哈"); } }
直接父类创建新对象:结果报错
使用动物子类创建新对象,因为狗类也是抽象接口所以也报错
使用非抽象子类创建新对象(正确)
public class Test { public static void main(String[] args) { Animal erhaDog = new ERHADog(); Animal jinmaoDog = new JINMAODog(); erhaDog.say(); jinmaoDog.say(); } }
-
抽象类是不是必须要有抽象方法
2021-08-15 23:57:30在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象之外,...在回答这个问题之前,先来了解一下抽象类。
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。(菜鸟教程)
抽象方法只包含一个方法名,而没有方法体。
先定义一个抽象类
public abstract class Student { private String name; private int age; public Student(){}; public Student(String name,int age,String adrees){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
当尝试new对象的时候,会出现以下错误。
我们定义一个pupil类继承Student,并且new个对象public class pupil extends Student{ private String name; private int age; public pupil(String name, int age) {//子类在调用父类时 无论自己有没有构造方法都会先去执行父类无参的函数,或者显示调用父类的有参构造函数 super(name, age); } public static void main(String[] args) { pupil p = new pupil("ma", 12); p.setAge(18); //调用的是父类的方法 System.out.println(p.getAge()); //18 } }
实例化一个 pupil类对象,该对象将从 Student类继承 7 个成员方法,且通过该方法可以设置或获取两个成员变量。
我们在Student里面新增一个抽象方法public abstract void Shuchu();
继承Student的pupil必须实现父类的抽象方法。
@Override public void Shuchu() { System.out.println(name+age); }
这里要注意,如果构造方法走的是父类的,那么打印出来的值将为空,因为值赋值给了父类的变量,pupil里面的变量值还是空的。
总结以上,抽象类并不是一定需要抽象方法,但是一个类拥有抽象方法,那么这个类必须是抽象类,子类必须实现父类的抽象方法,或者子类本身也为抽象类,抽象类绝对不能用来初始化对象。
-
抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
-
抽象方法需要被实现,不能被声明为静态,private,final修饰
-
-
11.抽象类必须要有抽象方法吗?
2020-07-26 22:07:01答:不需要, 抽象类不一定有抽象方法;...当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。abstract抽象类不能 -
抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
2020-10-18 22:02:42抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗? -
Java抽象方法和抽象类
2022-04-22 15:41:00把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以Person类无法被实例化。并且编译器会报错无法编译Person类,因为它包含抽... -
Java中抽象类和接口中有构造方法吗?
2021-03-08 05:52:39它们的语法区别:1)接口不能有构造方法,抽象类可以有。2)接口不能有方法体,抽象类可以有。3)接口不能有静态方法,抽象类可以有。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。忽然有此... -
java抽象类和抽象方法
2021-03-07 00:02:17一、什么是抽象类和抽象方法没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类,抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法。抽象类的使用一般通过继承来实现... -
定义一个抽象类Person,其中有一个公共的抽象方法work()。
2020-04-05 14:15:03定义一个抽象类Person,其中有一个公共的抽象方法work()。定义Person的子类:Student(学生)、Teacher(教师)。学生的工作是“预习、学习、复习、写作业”;教师的工作是“备课、上课、辅导、批改作业”。编写Test类,... -
java抽象类有构造方法吗?
2020-05-27 21:50:09定义抽象类 格式 : abstract class 类名{} 举例 : 抽象类中的 方法 抽象方法 abstract void eat();...抽象类中,有构造方法,但是有不能new,那么构造方法干嘛的呢? 给子类用的!!! 抽象类,一样可以使用多态来创建子 -
抽象方法必须在抽象类中吗
2021-03-11 10:44:32抽象方法必须在抽象类中吗2020-07-01 15:01:18文/叶丹1、抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。2、Final类中的属性和方法都必须被final修饰符修饰。3、最终类不能派生子类,最终方法不能被... -
JAVA抽象类中是否一定要有抽象方法
2018-02-23 22:16:12抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一...如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。... -
定义一个抽象类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类
2020-12-23 18:50:10定义一个抽象类shape,它包含一个抽象方法getArea() 定义一个抽象类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类,这两个类都用getArea()方法计算对象面积,编写应用程序使用Rectangle... -
Java抽象类中是否可以有构造方法
2021-03-23 10:40:52之所以产生这个疑问,是因为Java抽象类本身的要求抽象类是不能被实例化的,抽象类只能作为其他类的父类,或者通过向上转型指向其子类。所以既然抽象类是不允许被实例化的,那么他的构造方法存在是否还有实际意义? ... -
JAVA 抽象类,抽象方法
2021-04-22 21:18:22如一个抽象类Animal中有一个抽象方法run.public class Animal{public abstract void run();}那么他的子类必须要实现run这个方法。不是实现的话编译就会报错。public class Dog{@Overridepublic void r... -
抽象类+抽象方法
2021-01-09 15:56:30对于这样的场景,我们可以将动物类,设计为抽象类,抽象类不能被实例化对象,只是提供了所有的子类的共有的部分,为了给所有的子类定义公共属性 abstract class Animal{ String name; int age; public void eat(){} ... -
Java中抽象类可以有非抽象方法
2020-07-03 20:57:37但是如果这个类有抽象方法那么它一定是抽象类 package com.d; public abstract class Vehicle { public abstract String NoOfWheels(); public String No(){ System.out.println("抽象类的非抽象方法"); return... -
接口和抽象类的区别是什么?抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
2019-04-23 22:14:41接口和抽象类的区别是什么? •接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口...•一个类实现接口的话要实现接口的所有方法,而抽象类不一定。 •接口不能用 new 实例化,但可以声明,但... -
C#中抽象类与抽象方法的详解
2020-06-17 17:41:11抽象类的含义是什么? 抽象类怎么创建? 抽象类的规则有哪些? 抽象方法? 抽象类被运用的意义是什么? -
Java 抽象类中构造方法的作用?如何理解?
2021-02-12 15:25:38java抽象类的构造方法和普通类的构造方法一样都是用来初始化类只是抽象类的构造方法不能直接调用 因为抽象类不能实现实例但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数也可以使用其... -
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形...
2019-11-14 11:41:43设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。 直接上代码了 package ThirdDay; abstract class... -
如何调用抽象类中的抽象方法?以及如何调用接口中的抽象方法?
2021-10-13 12:08:00目录1. 如何调用抽象类中的抽象方法?2. 如何调用接口中的抽象方法? 1. 如何调用抽象类中的抽象方法? 2. 如何调用接口中的抽象方法? -
继承了抽象类的子类需要把抽象类中的方法重写一遍吗?
2018-10-31 21:39:05继承了抽象类的子类需要把抽象类中的方法重写一遍吗? 抽象类中的非抽象方法不用重写,其他必须重写,接口的方法必须重写; 接口和抽象类中只有方法名,没有定义的,如果你不定义 也就是空方法,接口就是为了弥补... -
定义一个抽象类shape表示图形类,包含一个抽象方法doublearea()用来计算圆形的面积
2020-12-08 13:50:39在面向对象62616964757a686964616fe4b893e5b19e31333433633363方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是...