精华内容
下载资源
问答
  • 抽象类可以有具体方法吗
    千次阅读
    2021-03-08 05:52:39

    以举例的方式说到如何区分抽象类和接口,这里我们从Java语法谈起,使我们更加了解这两者的内在区别。它们的语法区别:

    1)接口不能有构造方法,抽象类可以有。

    2)接口不能有方法体,抽象类可以有。

    3)接口不能有静态方法,抽象类可以有。

    4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。

    忽然有此一文,是因为同学疑惑道:抽象类居然还有构造方法,又不能直接用来new。我的解释是平时在抽象类中对于构造方法的存在,没有什么印象,是因为IDE默认为你生成了一个无参构造方法,也可以显式地写出构造方法,这个构造方法,是用来被子类调用的,因为任何子类都必须调用从Object开始的所有父亲的构造方法,才算完成初始化工作。那么我引申一下,问他们,接口有构造方法吗?他们的理解,抽象可以有,为什么接口不可以有?!那么在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。这又何解?

    从语法的角度来说,抽象类必须有构造方法,而接口严禁有构造方法,这本身也说明了它们性质的不同。抽象类是一个类,别的类是用关键字 extends 来继承下来,并扩展的,有非常强的is-a的关系,这种关系一般来说符合里氏代换原则。而接口,是被其他类用关键字 implements 来实现接口定义的方法的。如果没什么区别,何必整出两个不同的关键字。  接口只是定义功能和行为规范,如果一个类实现了一个接口,那么这个类必须遵守这个接口的方法约定,但没有is-a的关系。把墙壁上的“小学生行为规范”想象成一个接口,那么是小学生必须遵守这个约定,但小学生不是“行为规范”。

    构造方法是用来在对象初始化前对对象进行一些预处理的,提供了实例化一个具体东西的入口。接口只是声明而已,不一定要进行什么初始化,就算要进行初始化,也可以到实现接口的那一些类里面去初始化。接口只是用来表述动作,表述规范来的,可以new一台computer,但我们无法new一个IDE、SATA、PCI、PS-2。因此,接口要构造方法何用?接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器的调用次序,构造器是属于类自己的,不能继承,因为是纯虚的,接口不需要构造方法。而抽象类是具体类的祖先,即使是石器时代,也总要干些初始化的工作,抽象类虽然是不能直接实例化,但实例化子类的时候,就会初始化父类,不管父类是不是抽象类都,都会调用父类的构造方法,初始化一个类,先初始化父类,有没有说初始化接口。

    1)Java中抽象类和接口中有构造方法吗?

    在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。

    A. 构造方法用于初始化成员变量,但是接口成员变量是常量,无需修改。接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,

    B. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序

    C. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。

    在抽象类中可以有构造方法,只是不能直接创建抽象类的实例对象,但实例化子类的时候,就会初始化父类,不管父类是不是抽象类都会调用父类的构造方法,初始化一个类,先初始化父类。

    A.方法名与类名相同;

    B.没有返回类型(例如return、void等);

    C.不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

    D.父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。

    E.构造方法可以重载,以参数的个数,类型,顺序,分为空参构造方法和有参构造方法。

    注:

    抽象类中不一定有抽象方法,抽象方法一定存在于抽象类中。

    继承抽象类的可以是普通类,但必须重写抽象类中的所有抽象方法,也可以是抽象类,无需重写抽象类中的所有抽象方法。

    注:

    可以说是一种特殊的抽象类,里面的方法全是抽象方法。

    子类实现接口必须对接口中的方法全部重写。

    1)接口不能有构造方法,抽象类可以有。

    2)接口不能有方法体,抽象类可以有。

    3)接口不能有静态方法,抽象类可以有。

    4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。

    更多相关内容
  • Java抽象类中是否可以有构造方法

    千次阅读 2021-03-23 10:40:52
    无论是无参构造方法,还是参构造方法可以正常存在 之所以产生这个疑问,是因为Java抽象类本身的要求抽象类是不能被实例化的,抽象类只能作为其他类的父类,或者通过向上转型指向其子类。所以既然抽象类是不允许...

    直接给答案:可以

    无论是无参构造方法,还是有参构造方法都可以正常存在

    之所以产生这个疑问,是因为Java抽象类本身的要求抽象类是不能被实例化的,抽象类只能作为其他类的父类,或者通过向上转型指向其子类。所以既然抽象类是不允许被实例化的,那么他的构造方法存在是否还有实际意义?

    直接上例子

    //抽象父类
    abstract public class Shape {
        public Shape(){
            System.out.println("这是Shape的构造方法");
        }
    
        public Shape(String test){
            System.out.println(test);
        }
    
        abstract public double area();
    }
    
    //子类
    public class Circle extends Shape {
        public final double PI=3.14;
    
        private double r;       //半径
    
        public Circle() {
        }
    
        public Circle(double r) {
            super("测试");
            this.setR(r);
        }
    
        public double getR() {
            return r;
        }
    
        public void setR(double r) {
            this.r = r;
        }
    
        @Override
        public double area() {
            return PI*this.getR()*this.getR();
        }
    }
    
    //子类
    public class Rectangle extends Shape {
        private double length;
        private double width;
    
        public Rectangle() {
        }
    
        public Rectangle(double length, double width) {
            this.setLength(length);
            this.setWidth(width);
        }
    
        public double getLength() {
            return length;
        }
    
        public void setLength(double length) {
            this.length = length;
        }
    
        public double getWidth() {
            return width;
        }
    
        public void setWidth(double width) {
            this.width = width;
        }
    
        @Override
        public double area() {
            return this.getLength()*this.getWidth();
        }
    }
    
    //测试类
    public class TestShape {
        public static void main(String[] args) {
            Shape shape1 =new Circle(3);
            Shape shape2=new Rectangle(3,4);
            System.out.println("圆的面积为:"+shape1.area());
            System.out.println("矩形的面积为:"+shape2.area());
        }
    }
    
    

    这里是程序的输出结果
    在这里插入图片描述
    显然,抽象父类的构造方法都被执行到了

    简单解释下原因,在实例化子类对象的时候,无论子类的父类是不是抽象类都会先调用父类的构造方法,如果你在实例化子类对象的地方打上断点逐步执行,你会发现在执行子类构造方法之前会先进到父类中执行父类的构造方法,初始化一个子类会先初始化父类

    所以父类的构造方法是会被执行到的,可以在其中完成一些你的业务逻辑

    展开全文
  • 抽象类可以有实现体的方法

    千次阅读 2015-10-16 16:02:00
    2019独角兽企业重金招聘Python工程师标准>>> ...抽象类可以拥有具体实现了的方法,只是不能直接实例化(不能直接new 抽象方法); 转载于:https://my.oschina.net/craftsdream/blog/518074

    今天,准备看看公司项目是如何封装基本的一些基础的方法。比如:BaseConttoller/BaseService/BaseEntity extends AbstractEntity 等

            突然发现,原来这些基础的类都是抽象类(用 abstract 修饰的),原来认为抽象类都是只可以实现抽象方法的;

    现在看来,抽象类也可以拥有具体实现了的方法,只是不能直接实例化(不能直接new 抽象方法);

    转载于:https://my.oschina.net/craftsdream/blog/518074

    展开全文
  • 接口可以继承接口。 抽象类并不能继承接口,但可以实现...抽象类可以有静态的 main 方法抽象类在面向对象中是被用来描述现实中的抽象事物, 抽象类没有对象概念所以不能被实例化. 但可以定义属性和方法, 其中属性方.

    接口可以继承接口。

    抽象类并不能继承接口,但可以实现接口。

    抽象类可以继承具体类,前提是具体类必须具有构造函数且具有访问权限。这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造函数的具体类也可以被抽象类继承。但是,一旦将具体类的无参构造器设置访问修饰符为 private 时,抽象类则不可以继承。

    抽象类可以有静态的 main 方法。抽象类在面向对象中是被用来描述现实中的抽象事物, 抽象类没有对象概念所以不能被实例化. 但可以定义属性和方法, 其中属性方法都可以是静态的. 静态的意义其实就是在栈内存中只有一个, 所以该成员也会先于对象出现在内存中, 所以静态并没有违反抽象的原则. 抽象类中可以定义静态成员.

    interface IA{}
    interface IB{}
    interface I extends IA,IB{}//接口可以继承多个接口
    abstract class E implements IA{} //抽象类可以实现接口,但不可以继承接口
    abstract class F extends C{}//抽象类可以继承具体类
    class D{private D(){}}
    //abstract class G extends D{}//Implicit super constructor D() is not visible for default constructor. Must define an explicit constructor抽象类不可以继承无权限构造器的具体类
    abstract class H{public static void main() {}}//抽象类可以有静态的main方法
    
    展开全文
  • java抽象类可以被继承吗?

    千次阅读 2021-03-06 06:39:35
    抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。java抽象类可以被继承吗?抽象类可以被继承。抽象类除了不...
  • Java抽象方法抽象类

    千次阅读 2022-04-22 15:41:00
    如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法 public abstract void run(); } 把一个方法...
  • 抽象类是否可继承具体类?抽象类中是否可以有静态的main方法? 上面这个题目我们来慢慢的剖析一下。先从基本的概念说起。 一、接口 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的...
  • 抽象类是不是必须要抽象方法

    千次阅读 2021-08-15 23:57:30
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类抽象类除了不能实例化对象之外,...
  • Java抽象类可以有构造函数吗

    万次阅读 多人点赞 2019-03-11 21:23:51
    可以有抽象类可以声明并定义构造函数。因为你不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用(Java中构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现类。现在一些面试...
  • java抽象类和抽象方法

    千次阅读 2021-03-07 00:02:17
    一、什么是抽象类和抽象方法没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法抽象类的使用一般通过继承来实现...
  • 抽象类可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现...
  • 继承了抽象类的子类需要把抽象类中的方法重写一遍吗? 抽象类中的非抽象方法不用重写,其他必须重写,接口的方法必须重写; 接口和抽象类中只有方法名,没有定义的,如果你不定义 也就是空方法,接口就是为了弥补...
  • 目录1. 如何调用抽象类中的抽象方法?2. 如何调用接口中的抽象方法? 1. 如何调用抽象类中的抽象方法? 2. 如何调用接口中的抽象方法
  • 因为抽象类不能实现实例但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数也可以使用其方法可以这么理解吧 抽象类就是一个不能实例化的不同类不过如果方法加了abstract那么就必须在子类...
  • 抽象类具体类的区别

    千次阅读 2020-12-08 19:11:42
    抽象类可以声明抽象方法具体类中不可以声明抽象方法 抽象类可以直接实例化,具体可以直接实例化 抽象类和直接继承抽象类具体类继承抽象类时必须实现所有的抽象方法 抽象类继承接口时可以不实现接口中
  • C#抽象类和抽象方法(很详细,你值得拥有!!!)

    千次阅读 多人点赞 2020-06-18 19:10:32
    什么是抽象类? 什么是抽象方法? 抽象类和抽象方法有什么特性? 抽象类的使用场景? 抽象类的作用? 抽象类和接口的区别? 抽象类和抽象方法怎么声明? 抽象类和抽象方法如何使用?
  • Java中抽象类方法的重写

    千次阅读 2020-11-10 22:29:33
    1. 抽象类 关键字:abstract 类:用来描述一类具体的事物 抽象类:抽象的、模糊的、不具体的类 在Java的普通类中是不允许多...抽象类可以有抽象方法,也可以有非抽象的方法 2.抽象类可以有构造器,但是不能创建
  • C#中抽象类与抽象方法的详解

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

    千次阅读 2019-12-11 15:49:33
    1、抽象类的说明 ...抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法具体实现也就是方法具体功能。 构造方法,类方法(用static修饰的方法)不能声明为抽象方法抽象类的子...
  • C#中的抽象类、抽象属性、抽象方法

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

    千次阅读 2020-12-06 22:03:47
    抽象类:抽象方法所在的类,必须是抽象类才行,在class之前协商abstract即可 public abstract class Animal { //这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定 public abstract void eat...
  • 抽象类和抽象方法定义及讲解?

    千次阅读 多人点赞 2019-02-26 17:26:23
    (2)抽象类可以包含抽象成员,但非抽象类中不可以。 (3)如果一个非抽象类抽象类中派生,则其必须通过覆盖来实现所有继承而来的抽象成员。 Java 中声明抽象类时需要使用abstract 关键字,具体语法格式如下:...
  • Java抽象类/抽象方法定义及其特性详解

    千次阅读 多人点赞 2019-09-28 18:37:53
    类的继承结构中,越往上的类越具有通用性,也就越抽象。当它抽象到一定程度,就变成概念成框架,不能再产生实例化的对象了。例如“交通工具”,就无法用它...与抽象类紧密相连的是抽象方法一它总是用在抽象类或接口中。
  • 抽象类具体类区别

    千次阅读 2018-07-07 12:28:00
    abstract 抽象是不能被直接实例化的、用例、信号、其他元或其他泛化元素,它也可以用来描述没有实现的操作。反义词:具体(concrete)。 见抽象操作(abstract opera
  • 抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的...在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类...
  • 接口是一个特殊的抽象类,里面只能抽象方法 接口使用interface定义 接口里面的抽象方法不用使用abstract定义 子类通过关键字implements去实现接口,必须把接口的抽象方法全部实现出来 一个子类可以实现多个端口...
  • 如何调用抽象类中的非抽象方法

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

    千次阅读 2020-07-15 00:27:20
    什么是抽象类呢? 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不...3.因为父类引用指向子类对象时,调用的方法是子类重写的方法,一般父类中的描述不够具体,并不是说抽象类的构造方法没有意.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 702,817
精华内容 281,126
关键字:

抽象类可以有具体方法吗