精华内容
下载资源
问答
  • 抽象类中可以没有抽象方法
    千次阅读
    2020-06-11 09:20:14

    抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
    如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。

    抽象类可以没有抽象方法,甚至可以和普通类一样含有构造方法。当你要求不能创建某个类的实例,只能通过其他类继承这个类来使用时,就可以定义为抽象类。

    抽象类中可以没有抽象方法,也可以包含非抽象方法,但有抽象方法的类一定是抽象类。

    更多相关内容
  • 抽象类中可以没有抽象方法 这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你 无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不...

    在抽象类中可以没有抽象方法

    这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你
    无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不,在Java的最终类中不可能有抽象方法。 为什么? 因为一旦在Java类中声明抽象方法,该类就会自动变为抽象类,并且您无法像前面所讨论的那样在Java中将抽象类定为final ,因此,在Java的final类中不可能有抽象方法。

    正如我说过的那样,许多Java程序员对这个问题的措辞感到困惑,就像我说的那样,即使是被问到这个问题的读者也很熟悉这个概念,他并没有意识到,只要您在其中声明了一个抽象方法就可以了。一个类,它将成为一个抽象类,并且不可能在Java中将抽象类定型为final。

    这是一条丢失的信息,或者您称其为把它与更流行和常见的问题分开的把戏,是否可以在Java中声明一个抽象类和final类

    让我们看一个代码示例,以证明这一点,即您无法在最终类中声明抽象方法。 我们有一个名为Hello的公共最终类,该类中有一个名为print()的抽象方法。
    Hello.java文件。

    public final class Hello {
    
      public abstract print();
    
    }

    在Eclipse IDE中键入该命令后,将立即收到以下错误消息:

    Hello类型必须是抽象类才能定义抽象方法

    这是另一个屏幕快照,显示您在Java的最终类中不能拥有抽象方法:

    当您在记事本中写下此代码并从命令行窗口使用javac对其进行编译时 ,情况也是如此。 根据Java规范,一旦在类中声明了抽象方法,该方法便自动成为抽象类,并且由于无法在Java中将抽象类定型为最终类,因此编译器将引发错误。

    Java中的顶级类或嵌套类均是如此。 即使在嵌套的最终类上声明抽象方法 ,您也会收到相同的错误。

    关于此主题的另一个后续问题是,抽象类可以在Java中具有静态方法吗? 答案是肯定的,在Java中的抽象类中声明静态方法没有问题,因为您无需实例化类即可使用静态方法,只需使用类名即可调用它们。

    我们可以修改代码示例,使其在Hello类中包括main()方法 ,该类是Java中的静态方法,如下所示:

    public abstract class Hello {
    
      public abstract void print();
    
      public static void main(String args[]) {
         .. some code here
      }
    
    }

    您可以看到没有编译时错误。 代码可以很好地编译,因此在Java 抽象类中声明静态方法是完全可以的。

    这就是关于是否可以在最终类中使用抽象方法的全部内容 正如我说的那样,这是不可能的,因为一旦您在类内部创建了抽象方法,按照Java规范,该类就会自动成为抽象类。 由于您无法使用Java将最终类抽象化,因此这变得非法,并且编译器会通过抛出错误来禁止这样做。 但是,是的,您可以在最终类和抽象类上都声明静态方法,这没有问题。 如果您正在学习Java,建议您进一步阅读
    不耐烦的Core Java让您熟悉诸如抽象和最终类之类的核心概念。 它还涵盖了Java 8。

    其他相关Java面试问题的练习

    1. 抽象类可以在Java中具有构造函数吗? ( 回答
    2. 您可以在Java中覆盖静态方法吗? ( 回答
    3. 您可以重载Java中的静态方法吗? ( 回答
    4. 您可以在Java中运行没有main()方法的程序吗? ( 回答
    5. 您可以覆盖Java中的私有方法吗? ( 回答
    6. 您可以重载和覆盖Java中的main()方法吗? ( 回答
    7. 您可以在Java中使数组易变吗? ( 回答
    8. 您可以在Java中声明一个静态类吗? ( 回答

    进一步阅读

    Java编程面试公开

    Head First Java第二版

    感谢您阅读本文,如果您喜欢这个核心Java面试问题和我的解释,请与您的朋友和同事分享。

    翻译自: https://www.javacodegeeks.com/2017/07/possible-abstract-method-final-class.html

    在抽象类中可以没有抽象方法

    展开全文
  • 抽象类必须要有抽象方法吗?

    万次阅读 2019-07-22 14:36:51
    2.抽象类可以没有抽象方法 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-03-11 10:44:32
    抽象方法必须在抽象类中吗2020-07-01 15:01:18文/叶丹1、抽象方法必须在抽象类中,所以抽象类中方法都必须是抽象方法。2、Final类的属性和方法都必须被final修饰符修饰。3、最终类不能派生子类,最终方法不能被...

    抽象方法必须在抽象类中吗2020-07-01 15:01:18文/叶丹

    1、抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。2、Final类中的属性和方法都必须被final修饰符修饰。3、最终类不能派生子类,最终方法不能被覆盖。4、子类要调用父类的方法,必须使用super关键字。

    f1ebd2a5cf50b280c7f777e70826ce81.png

    抽象方法:

    java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。

    抽象方法与抽象类:

    当一个方法为抽象方法时,意味着这个方法应该被子类的方法所重写,否则其子类的该方法仍然是abstract的,这个子类由于继承父类,拥有抽象方法,因此它也是抽象类,即声明为abstract。abstract抽象类不能用new实例化对象,abstract方法只允许声明不能实现。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰,当然abstract类也可以没有abstract方法。 一个抽象类里面没有一个抽象方法可用来禁止产生这种类的对象。

    抽象方法与接口:

    在interface中所有的方法都是public abstract的,即使你没有申明它是public abstract的。在interface中所有的数据成员都是public static final的,即使你没有申明.但不能是blank final 在编译时候确定的。在Java,interface的地位和class是一样的。实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。Interface可以从多个interface得到继承,但是不能继承类。一个类可以实现多个interface。

    展开全文
  • 以举例的方式说到如何区分抽象类和接口,这里我们...4)在接口凡是变量必须是public static final,而在抽象类中没有要求。忽然有此一文,是因为同学疑惑道:抽象类居然还有构造方法,又不能直接用来new。我的解释...
  • Java抽象类中是否可以有构造方法

    千次阅读 2021-03-23 10:40:52
    所以既然抽象类是不允许被实例化的,那么他的构造方法存在是否还有实际意义? 直接上例子 //抽象父类 abstract public class Shape { public Shape(){ System.out.println("这是Shape的构造方法"); } p
  • Java中抽象类可以有非抽象方法

    千次阅读 2020-07-03 20:57:37
    java中抽象类可以有非抽象方法、抽象方法 但是如果这个类有抽象方法那么它一定是抽象类 package com.d; public abstract class Vehicle { public abstract String NoOfWheels(); public String No(){ System.out...
  • Java抽象方法抽象类

    千次阅读 2022-04-22 15:41:00
    如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法 public abstract void run(); } 把一个方法...
  • 含有抽象方法的类一定是抽象类,...Person类(没有抽象方法抽象类): public abstract class Person { private String name; private int age; public Person() { } public Person(String name, int ...
  • 目录1. 如何调用抽象类中的抽象方法?2. 如何调用接口的抽象方法? 1. 如何调用抽象类中的抽象方法? 2. 如何调用接口的抽象方法
  • java抽象类和抽象方法

    千次阅读 2021-03-07 00:02:17
    一、什么是抽象类和抽象方法没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法。抽象类的使用一般通过继承来实现...
  • 011 抽象类必须要有抽象方法吗?

    千次阅读 2021-02-28 14:53:53
    (有抽象方法就是抽象类,是抽象类可以没有抽象方法)解释:抽象方法:java的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不...
  • 简单来说,接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法...
  • 因为抽象类不能实现实例但是一旦一个普通类继承了抽象类 便也可以在构造函数调用其抽象类的构造函数也可以使用其方法可以这么理解吧 抽象类就是一个不能实例化的不同类不过如果方法加了abstract那么就必须在子类...
  • 如何在java调用抽象类方法

    千次阅读 2021-03-03 12:21:42
    我想在我自己的类调用一个抽象类方法.抽象类是:public abstract class Call {public Connection getEarliestConnection() {Connection earliest = null;...return earliest;}}我想调用上面的方法,调用类是:...
  • C#中抽象类与抽象方法的详解

    万次阅读 2020-06-17 17:41:11
    抽象类的含义是什么? 抽象类怎么创建? 抽象类的规则有哪些? 抽象方法? 抽象类被运用的意义是什么?
  • 抽象类+抽象方法

    千次阅读 2021-01-09 15:56:30
    对于这样的场景,我们可以将动物类,设计为抽象类抽象类不能被实例化对象,只是提供了所有的子类的共有的部分,为了给所有的子类定义公共属性 abstract class Animal{ String name; int age; public void eat(){} ...
  • Java中抽象类方法的重写

    千次阅读 2020-11-10 22:29:33
    1. 抽象类 关键字:abstract 类:用来描述一类具体的事物 抽象类:抽象的、模糊的、不具体的类 在Java的普通类中是不允许多继承的,原因是会出现调用 不明确的问题;...抽象类中可以有构造器,但是不能创建
  • C#抽象类、抽象属性、抽象方法

    千次阅读 多人点赞 2020-06-10 00:51:31
    前言:本博文讲述了C#面向对象抽象类,通过本博文的阅读,读者可以掌握C#抽象类的概念、应用、好处以及一些特性。 文章目录一、抽象类概念二、示例讲解三、抽象类的作用四、使用抽象类的好处五、抽象类总结 一、...
  • Java抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • Java抽象类中的静态方法

    万次阅读 2018-12-06 20:09:26
    抽象类中可以有静态方法的,在被子类继承后可以通过子类的实例化对象调用;也可以直接通过抽象类和子类的类名来调用,就像其他的静态方法一样。同样的静态变量也可以使用相同的方法访问。 实例: package ...
  • 接口可以继承接口。 抽象类并不能继承接口,但可以实现接口。 抽象类可以继承具体类...抽象类在面向对象是被用来描述现实的抽象事物, 抽象类没有对象概念所以不能被实例化. 但可以定义属性和方法, 其中属性方.
  • 抽象类是否可以没有方法和属性?

    千次阅读 2019-05-07 23:31:32
    抽象类中可以没有抽象方法,但有抽象方法的一定是抽象类(如HttpServlet)。但即使抽象类没有抽象方法,也不能被new出来。 没有抽象类方法抽象类的存在价值在于:类已经定义好了,不能改变其中的方法体(实例化...
  • 抽象类中是否可以有静态的main方法? 上面这个题目我们来慢慢的剖析一下。先从基本的概念说起。 一、接口 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,...
  • 如何调用抽象类中的非抽象方法

    千次阅读 2020-10-18 15:40:28
    2.在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实
  • 抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  • 抽象类和抽象方法

    千次阅读 2018-08-12 19:46:26
    含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类方法不必是抽象的。abstract class类定义抽象方法必须在具体(Concrete...
  • JAVA 抽象类,抽象方法

    千次阅读 2021-04-22 21:18:22
    如一个抽象类Animal有一个抽象方法run.public class Animal{public abstract void run();}那么他的子类必须要实现run这个方法。不是实现的话编译就会报错。public class Dog{@Overridepublic void r...
  • 抽象类和抽象方法的使用

    千次阅读 2022-02-08 15:50:04
    3、开发,都会提供抽象类的子类,让子类实例化,完成相关操作 4、abstract修饰方法没有方法体 这个例子不是没有方法体,不是抽象方法 public void eat(){ } 抽象方法的定义:只有方法的声明,没有方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,465,187
精华内容 586,074
关键字:

抽象类中可以没有抽象方法