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;}@Overridepublic 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;}@Overridepublic 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());}
}
这里是程序的输出结果
显然,抽象父类的构造方法都被执行到了
简单解释下原因,在实例化子类对象的时候,无论子类的父类是不是抽象类都会先调用父类的构造方法,如果你在实例化子类对象的地方打上断点逐步执行,你会发现在执行子类构造方法之前会先进到父类中执行父类的构造方法,初始化一个子类会先初始化父类。
所以父类的构造方法是会被执行到的,可以在其中完成一些你的业务逻辑
Java抽象类中是否可以有构造方法相关推荐
- java抽象类中的变量修饰符_菜鸟整理的三个权限修饰符与接口、抽象类的总结...
static 静态变量 被static修饰的变量其实是一个全局变量. 当这个类被虚拟机第一次加载的时候,就会为该变量分配了内存空间. 当该类创建实例时,并不会生成对static变量的拷贝.而是多个该类 ...
- Java抽象类中可以有构造函数吗
答案是肯定的,Java的一个抽象类中可以有构造函数,抽象类虽然不能够实例化对象,但是子类通过继承抽象类,必然需要实现其中的抽象方法,同时子类也需要实例化对象,这个时候,会调用父类的默认的无参构造方法或 ...
- java抽象类中的方法都是抽象方法吗_抽象方法必须在抽象类中吗
抽象方法必须在抽象类中吗2020-07-01 15:01:18文/叶丹 1.抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法.2.Final类中的属性和方法都必须被final修饰符修饰.3. ...
- java抽象类中必须有抽象方法吗_011 抽象类必须要有抽象方法吗?
抽象类必须要有抽象方法吗? 答:不需要, 抽象类不一定有抽象方法:但是包含一个抽象方法的类一定是抽象类.(有抽象方法就是抽象类,是抽象类可以没有抽象方法) 解释: 抽象方法: java中的抽象方法就是 ...
- Java继承中的子类父类构造方法的调用
Java的继承中,关于子类和父类构造方法的使用. 子类在初始化时,一定会调用父类的构造方法. 原因如下: 在子类继承父类时,子类会继承父类所有的公共成员变量,公共方法,这些方法在子类中不再重复声明. ...
- Java抽象类中,普通方法依赖抽象方法时,抽象方法有入参的实现方法
学些Java的抽象类和抽象方法,书中介绍一个例子: [问题描述]编写一个抽象父类SpeedMeter速度表,提供普通方法getSpeed()计算速度,给子类使用,但留给子类实现抽象方法getRadiu ...
- java定义一个door的类_再探Java抽象类与接口的设计理念差异
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是 ...
- 在抽象类中可以没有抽象方法_是否可以在最终课程中使用抽象方法?
在抽象类中可以没有抽象方法 这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一. 即使他知道你 无法用Java将抽象类定型为final ,他对方法的措辞感到困 ...
- 再探Java抽象类与接口的设计理念差异
Java抽象类与接口都可以实现功能与实现的分离,都对多态提供了很好的支持,那么我们什么时候应该使用抽象类或接口呢?在以前的一篇文章初探Java抽象类与接口中谈到了他们语法的区别,在博客通过模板方法模式 ...
最新文章
- ZOJ 3820 Building Fire Stations
- linux软中断分析,linux操作系统下的软中断问题分析_linux教程
- linux shell审计--snoopy的注意事项
- 投票|PMCAFF产品经理第一课,下一站去哪?杭州、深圳、上海...
- keyshot手机渲染教程_keyshot灯光渲染基础入门教程【英】
- shell mysql版本_mysql版本5.5.x升级到5.6.x步骤分享
- dj电商-模型类设计-商品模块数据表
- Mac源码安装使用OpenCV
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现...
- Response常用方法
- java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
- 最牛逼android上的图表库MpChart(二) 折线图
- string类和标准模板库
- 如何采用类比法和类推法估算软件项目工作量
- 华为光猫上线流程、注册失败、常见语音故障处理
- Android 系统生成 releasekey
- 空间三点定圆的解算过程
- Dart学习笔记六:集合类型详解
- 洛谷 T178529 最长双倍子串 题解
- DNS中的正向解析与反向解析 及 nslookup命令使用