精华内容
下载资源
问答
  • 抽象类可以被扩展吗
    千次阅读
    2020-11-29 17:45:20

    请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。

    public abstract class shape {// 抽象类

    public abstract double getArea();// 求面积

    public abstract double getPerimeter(); // 求周长
    }

    主类从键盘输入圆形的半径值,创建一个圆形对象,然后输出圆形的面积和周长。保留4位小数。

    圆形类名Circle
    裁判测试程序样例:
    import java.util.Scanner;
    import java.text.DecimalFormat;

    abstract class shape {// 抽象类
    /* 抽象方法 求面积 */
    public abstract double getArea( );

    /* 抽象方法 求周长 */
    public abstract double getPerimeter( );
    

    }

    /* 你提交的代码将被嵌入到这里 */

    public class Main {
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    DecimalFormat d = new DecimalFormat("#.####");// 保留4位小数
    double r = input.nextDouble( );
    shape c = new Circle®;

        System.out.println(d.format(c.getArea()));
        System.out.println(d.format(c.getPerimeter()));
        input.close();
    } 
    

    }
    输入样例:
    3.1415926
    输出样例:
    31.0063
    19.7392

    class Circle extends shape{
    	private double radius;
    	public Circle(double radius){
    		this.radius =radius;
    	}
    	
    	public double getArea(){
    		return Math.PI *radius*radius;
    	}
    	public double getPerimeter( ) {
    		return 2*Math.PI*radius;
    	}
    }
    
    更多相关内容
  • 它们的语法区别:1)接口不能有构造方法,抽象类可以有。2)接口不能有方法体,抽象类可以有。3)接口不能有静态方法,抽象类可以有。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。忽然有此...

    以举例的方式说到如何区分抽象类和接口,这里我们从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,而在抽象类中没有要求。

    展开全文
  • 6-2 从抽象类shape类扩展出一个圆形类Circle (10分) 请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。 public abstract class shape {// 抽象...

    6-2 从抽象类shape类扩展出一个圆形类Circle (10分)

    请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。

    public abstract class shape {// 抽象类

    public abstract double getArea();// 求面积

    public abstract double getPerimeter(); // 求周长

    }

    主类从键盘输入圆形的半径值,创建一个圆形对象,然后输出圆形的面积和周长。保留4位小数。

    圆形类名Circle

    裁判测试程序样例:

    import java.util.Scanner;
    import java.text.DecimalFormat;
    
    abstract class shape {// 抽象类
         /* 抽象方法 求面积 */
        public abstract double getArea( );
    
        /* 抽象方法 求周长 */
        public abstract double getPerimeter( );
    }
    
    /* 你提交的代码将被嵌入到这里 */
    
    public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            DecimalFormat d = new DecimalFormat("#.####");// 保留4位小数
             double r = input.nextDouble( ); 
            shape c = new  Circle(r);
    
            System.out.println(d.format(c.getArea()));
            System.out.println(d.format(c.getPerimeter()));
            input.close();
        } 
    }
    
    

    输入样例:
    3.1415926
    输出样例:
    31.0063
    19.7392

    class Circle extends shape {
    	private double radius;
    	public Circle(double r) {
    		radius=r;
    	}
    	public double getArea() {
    		return Math.PI*radius*radius;
    	}
    	public double getPerimeter() {
    		return Math.PI*2*radius;
    	}
    }
    

    在这里插入图片描述

    展开全文
  • 请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。 public abstract class shape {// 抽象类 public abstract double getArea();// 求面积 ...

    请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。

    public abstract class shape {// 抽象类

    public abstract double getArea();// 求面积

    public abstract double getPerimeter(); // 求周长

    }

    主类从键盘输入圆形的半径值,创建一个圆形对象,然后输出圆形的面积和周长。保留4位小数。

    圆形类名Circle

    裁判测试程序样例:

    import java.util.Scanner;
    import java.text.DecimalFormat;

    abstract class shape {// 抽象类
    /* 抽象方法 求面积 */
    public abstract double getArea( );

    /* 抽象方法 求周长 */
    public abstract double getPerimeter( );
    

    }

    /* 你提交的代码将被嵌入到这里 */

    public class Main {
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    DecimalFormat d = new DecimalFormat("#.####");// 保留4位小数
    double r = input.nextDouble( );
    shape c = new Circle®;

        System.out.println(d.format(c.getArea()));
        System.out.println(d.format(c.getPerimeter()));
        input.close();
    } 
    

    }

    输入样例:

    3.1415926

    输出样例:

    31.0063
    19.7392

    class Circle extends shape{
    	private double radius;
    	
    	public Circle(double a) {
    		super();
    		this.radius = a;
    	}
    	public  double getArea() {
    		return Math.PI*radius*radius;
    	}
    	public double getPerimeter() {
    		return 2*Math.PI*radius;
    	}
    }
    
    展开全文
  • 请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。 public abstract class shape {// 抽象类 public abstract double getArea();// 求面积 ...
  • java抽象类 继承

    千次阅读 2021-03-08 06:02:32
    抽象类可以有已经实现了的方法,也可以abstract修饰的方法(抽象方法),因为存在抽象方法,所以该类必须是抽象类。但是接口要求只能包含抽象方法,抽象方法是指没有实现的方法。所以就不能像抽象类那么无赖了,...
  • 抽象类和接口

    千次阅读 2020-11-24 19:38:35
    抽象类 ​ 概述 ​ 父类当中的方法,他的子类们重写,子类的各自实现又不一样。那么父类的方法声明和方法体,只有声明还有意义,而方法体内容则没有存在的意义。我们把这种没有方法体内容的方法称为抽象方法。...
  • 抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个...
  • 一、java抽象类的作用java抽象类的作用具体的可以分成以下的三点:1、抽象类通常都是用来表征对问题领域进行分析、设计中得出的抽象概念,是对大多数看上去不同,可是本质上却是相同的具体概念的抽象2、在面向对象...
  •  最近有同事跟我说了他面试时遇到的问题,考官问:“接口和抽象类可以被new嘛?”。这可能不是考官的原话,但是据他表达考官大概就是这个意思了。听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用...
  • java中抽象类的子类可以定义为抽象类吗?比如我可以在在抽象子类中再扩展抽象方法
  • Java中抽象类实现接口

    千次阅读 2021-05-06 14:22:31
    Java中的抽象类主要是作为一个公共父类的作用,它可以抽象出用来描述一种类型应该具备的基本特征与功能,具体行为则由子类通过方法重写来完成。 抽象类具有的性质 类定义前需要加上abstract关键字 抽象类可以没有...
  • JAVA 抽象类,抽象方法

    千次阅读 2021-04-22 21:18:22
    通过抽象类可以严格的限制了子类的设计。如一个抽象类Animal中有一个抽象方法run.public class Animal{public abstract void run();}那么他的子类必须要实现run这个方法。不是实现的话编译就会报错。public class ...
  • 接口和抽象类可以被new嘛?——顺便总结内部类

    万次阅读 多人点赞 2015-08-04 21:04:13
     最近有同事跟我说了他面试时遇到的问题,考官问:“接口和抽象类可以被new嘛?”。这可能不是考官的原话,但是据他表达考官大概就是这个意思了。听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用...
  • 抽象类和接口有什么区别

    万次阅读 多人点赞 2018-08-25 20:36:35
    单纯用抽象类无法实现像接口一样灵活的扩展。 纯接口实现 如果我们像一个新码农一样,用纯接口来实现呢? InterfaceList 这样写理论上没有问题,实际写代码的时候问题就来了。所有的接口都要提供实现,...
  • java 的接口可以实现接口吗?抽象类呢?

    万次阅读 多人点赞 2017-05-15 15:52:56
    面试中可能会遇到这样的问题: 1.接口可以实现接口吗? ans:不可以. 2.抽象类可以实现接口吗? ans:可以
  • JAVA基础知识总结7(抽象类 | 接口)

    千次阅读 2021-03-14 14:54:36
    抽象类:abstract1.抽象:不具体,看不明白。...3.抽象方法所在类一定要标示为抽象类,也就是说该类需要abstract关键字所修饰。抽象类的特点:1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关...
  • 抽象类与具体类区别

    千次阅读 2018-07-07 12:28:00
    abstract 抽象是不能直接实例化的、用例、信号、其他元或其他泛化元素,它也可以用来描述没有实现的操作。反义词:具体(concrete)。 见抽象操作(abstract opera
  • 一、简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法;(不包括普通方法) ...如果是一个子抽象类可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的
  • 抽象类

    万次阅读 多人点赞 2019-01-01 11:55:58
    1,抽象类与抽象方法概念 抽象类用来描述一种类型应该具备的基本特征与功能, 具体如何去完成这些行为由子类通过方法重写来完成,如: 犬科均会吼叫,但属于犬科的狼与狗其吼叫内容...那么犬科就可以定义为抽象类,...
  • 抽象类(Abstract)的定义

    千次阅读 2021-12-05 14:08:55
    一、介绍 Abstract,即抽象。笼统的描述一类东西。 打个比方: 我们说车子都可以跑(run)。但有几个轮子,怎么跑,对于不同的车有不同的结果。...抽象类可以没有抽象方法,这样做的作用是这个类不可以被实例化;
  • 小白,你要的Java抽象类,操碎了心!

    千次阅读 多人点赞 2020-05-06 07:39:39
    自从给小白写了两篇科普性质的文章后,我就有点一发不可收拾,觉得很有必要继续写下去。因为有读者留言“鼓励”我说,“二哥,你真的是为小白操碎了心啊!...1)定义抽象类的时候需要用到关键字 abstract,放在...
  • TS 抽象类 abstract 的使用

    千次阅读 2021-04-28 21:12:36
    抽象类 特点 抽象类并不能进行实例化 他规范了继承他的子类必须拥有抽象属性与抽象方法 他提供了抽象属性与抽象方法来让继承他的子类重写,来实现不同的处理方式 他的保护属性与方法可以被每个子类继承来实现继承...
  • java 继承、super、this、抽象类

    万次阅读 2022-05-04 16:48:34
    java 继承、super、this、抽象类
  • 抽象类与接口的扩展功能

    千次阅读 2012-12-28 20:41:49
    抽象类与接口的扩展功能
  • 接口和接口实现类,接口与抽象类

    千次阅读 2019-02-07 16:34:56
    为了弥补这个不足,Java中的接口可以实现多重继承,一个类可以实现多个接口。 定义和实现接口 接口的定义包括接口声明和接口体两部分。接口体包括属性常量和抽象方法。 [public] interface 接口名 { 属性常量 ...
  • 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则...如果是一个子抽象类可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法。
  • 接口和抽象类的区别

    千次阅读 2020-01-27 23:08:15
    接口关键字:interface 接口定义了你要实现某种功能的规范, 接口成员 1、接口的方法都是抽象方法,默认使用public abstract 修饰,不能修改...接口不能创建对象,接口中的抽象方法由实现实现。实现使用imple...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 522,587
精华内容 209,034
关键字:

抽象类可以被扩展吗