精华内容
下载资源
问答
  • 抽象方法子类必须实现吗
    千次阅读
    2021-02-28 10:22:00

    接口的子类必须实现接口的全部方法吗?

    接口的子类必须实现接口中全部的方法吗?答案:不是。原因如下:

    如果子类是非抽象类,则必须实现接口中的所有方法;

    如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!

    1、抽象类定义

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。抽象类是 不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

    2、抽象类特点

    1)抽象类不能实例化。

    2)抽象类可以包含抽象方法和抽象访问器。

    3)不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。

    4)从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。

    3、与具体类的比较

    1)抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。

    2)允许(但不要求)抽象类包含抽象成员。

    3)抽象类不能被密封。

    4、抽象类与接口的比较

    1)相同点

    a、不能实例化;

    b、包含未实现的方法声明;

    c、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)

    2)不同点

    a、类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

    b、抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。

    c、抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

    d、抽象类是对象的抽象,然而接口是一种行为规范。

    结论:综上结果,由于子类类型的不同,对接口的实现要求也是不一样的。

    更多相关内容
  • JAVA——抽象

    千次阅读 2021-03-09 00:47:50
    2.有一个抽象方法的类必须抽象类;3.抽象类中一定有抽象方法,反之不成立;4.抽象类不能够实例化 ,即不能创建对象;5.抽象类的成员一般使用 public 或者 protected修饰;6.抽象类的抽象方法强制子类重写;7. 抽象...

    一、抽象类的概念

    包含一个抽象方法的类就是抽象类,其本质是对多个普通类中相同的部分的抽象。

    二、抽象类的特点

    1.抽象方法和抽象类使用 abstract 修饰;

    2.有一个抽象方法的类必须是抽象类;

    3.抽象类中一定有抽象方法,反之不成立;

    4.抽象类不能够实例化 ,即不能创建对象;

    5.抽象类的成员一般使用 public 或者 protected修饰;

    6.抽象类的抽象方法强制子类重写;

    7. 抽象类中所有的内容均是用来给子类使用;

    三、抽象类与普通类的区别

    抽象类和普通类在结构上的区别:抽象类有抽象方法,而普通类没有。

    四、抽象类的子类的特点

    1 如果子类想要继承抽象类,就必须实现抽象类中所有的抽象方法;

    2 如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类。

    五、代码演示

    例:编写一个交通工具类,具有前进run()功能,其子类有自行车、小轿车、地铁,重写父类方法。

    主人有属性name,age属性,方法回家goHome(交通工具),需要使用交通工具,使用抽象类优化程序。

    public static void main(String[] args) {

    Hoster hoster = new Hoster("张三", 30);

    Vehicle v = new Bike(); //使用多态创建对象

    hoster.goHome(v); //调用goHome()方法

    //创建匿名对象new Car(),并将其作为goHome()方法的形式参数

    hoster.goHome(new Car());

    //创建匿名对象new Hoster("李四", 31)并赋值,再调用goHome()方法

    new Hoster("李四", 31).goHome(new Subway());

    }

    class Hoster {

    private String name;

    private int age;

    public Hoster() {

    super();

    }

    public Hoster(String name, int age) {

    super();

    this.age = age;

    }

    public void goHome(Vehicle v) {

    v.run(this); //将参数传递给此处goHome方法,再调用this所指向对象 // (谁调用的goHome就指向谁)的run()方法。

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    }

    abstract class Vehicle { //abstract修饰的抽象类

    public abstract void run(); //abstract修饰的抽象方法

    public abstract void run(Hoster hoster); //abstract修饰的抽象方法

    }

    class Bike extends Vehicle {

    @Override //run()方法重写

    public void run() {//实现父类中的抽象方法

    System.out.println("自行车在跑");

    }

    @Override//run(Hoster hoster)方法重写

    public void run(Hoster hoster) {//实现父类中的抽象方法

    System.out.println(hoster.getName() + "骑着自行车回家"); //执行

    }

    }

    class Car extends Vehicle {

    @Override//run()方法重写

    public void run() {//实现父类中的抽象方法

    System.out.println("小轿车在跑");

    }

    @Override//run(Hoster hoster)方法重写

    public void run(Hoster hoster) {//实现父类中的抽象方法

    System.out.println(hoster.getName() + "开着小轿车回家");//执行

    }

    }

    class Subway extends Vehicle {

    @Override //run()方法重写

    public void run() {//实现父类中的抽象方法

    System.out.println("地铁在跑");

    }

    @Override // run(Hoster hoster)方法重写

    public void run(Hoster hoster) {//实现父类中的抽象方法

    System.out.println(hoster.getName() + "坐着地铁回家");//执行

    }

    }

    展开全文
  • 所以子类方法必须覆盖父类的抽象方法方法才能够起作用。 只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握! 为了实现多态,那么父类必须有定义。而父类并不实现,留给子类实现。此时...

    如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。
    所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。
    只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握!
    为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编译会出现错误。

    package TomText;
    import java.util.*;
    //本例展示了如何使用关系和逻辑运算符。
    public class TomText_31 {
            public static void main(String[] args) {
                Random rand = new Random();
                int i = rand.nextInt() % 100;
                int j = rand.nextInt() % 100;
                System.out.println ("i = " + i);
                System.out.println ("j = " + j);
                System.out.println ("i > j is " + (i > j));
                System.out.println ("i < j is " + (i < j));
                System.out.println ("i >= j is " + (i >= j));
                System.out.println ("i <= j is " + (i <= j));
                System.out.println ("i == j is " + (i == j));
                System.out.println ("i != j is " + (i != j));
                System.out.println ("(i < 10) && (j < 10) is " + ((i < 10) && (j < 10)) );
                System.out.println ("(i < 10) || (j < 10) is " + ((i < 10) || (j < 10)) );
                  }
    
    }
    
    展开全文
  • Java抽象类及子类方法的调用顺序

    千次阅读 2021-04-24 01:49:24
    2) 抽象类中的方法调用子类实现抽象方法3) 抽象类可以在子类未实例化时调用子类实现抽象方法;4) 在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应子类实现了此方法;在抽象类实例化之后,子类未实例化...

    结论:

    1) 实例化子类时必须先实例化父类;

    2) 抽象类中的方法调用子类实现的抽象方法

    3) 抽象类可以在子类未实例化时调用子类实现的抽象方法;

    4) 在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应子类实现了此方法;在抽象类实例化之后,子类未实例化之前,抽象类可以调用子类实现的抽象方法。

    代码如下:

    package com.example;

    public class Test {

    public static void main(String[] args) {

    new Child();

    //结果:初始化父类---->child eat---->child jump---->初始化子类

    }

    }package com.example;

    /**

    * Created on 2017/5/5.

    * Author:crs

    * Description:XXX

    */

    public class Child extends Parent {

    public Child() {

    System.out.println("实例化子类");

    }

    @Override

    void eat() {

    System.out.println("child eat");

    }

    @Override

    void jump() {

    System.out.println("child jump");

    }

    }

    package com.example;

    /**

    * Created on 2017/5/5.

    * Author:crs

    * Description:XXX

    */

    public class Child extends Parent {

    public Child() {

    System.out.println("实例化子类");

    }

    @Override

    void eat() {

    System.out.println("child eat");

    }

    @Override

    void jump() {

    System.out.println("child jump");

    }

    }

    展开全文
  • 设置一个抽象父类,一个继承的子类 public abstract class Parent { protected abstract void log(); protected void use(){ log(); } @Test public void test(){ use(); } } public class Children ...
  • 抽象类是不是必须要有抽象方法

    千次阅读 2021-08-15 23:57:30
    在回答这个问题之前,先来了解一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都...父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法
  • 请问java中,抽象类里的抽象方法都要在它的子类中全部实现吗?能不能有些抽象方法不实现?  分享| 2015-05-27 21:22忆晨儿 | 浏览 1161 次 来自:手机知道  java 2015-05-27 21:32 #2016...
  • #!/usr/bin/env python # coding:UTF-8 ""...@file: 父类指定子类继承后一定要实现方法.py @time: 2018/10/21 15:24 """ ''' 1、如果子类在继承后一定要实现的方...
  • 父类中的抽象方法子类实现

    千次阅读 2017-09-11 11:23:55
    父类 public abstract class Baba { public abstract void say(String a); public void dosomething(String a){ say(a);...子类 public class Erzi extends Baba { public void say(St
  • 继承了抽象类的子类需要把抽象类中的方法重写一遍吗? 抽象类中的非抽象方法不用重写,其他必须重写,接口的方法必须重写; 接口和抽象类中只有方法名,没有定义的,如果你不定义 也就是空方法,接口就是为了弥补...
  • 首先,父类有一个抽象方法,并且在自身的其他方法中调用了 public abstract class Baba { public abstract void say...父类 baba,有一个say抽象方法,没有实现,并且在dosomething中调用了。如果直接调用dosomethi...
  • 创建抽象类: package my; abstract class Fruit { public String color; public Fruit(){ color="绿色"; } public abstract void harvest(); } 创建子类: package my; public class Apple ...
  • 子类继承extends了这个父类的内容, 继承抽象必须实现他的抽象方法.即 migrate() 方法 Java:不能多继承 extends ,只能单继承,但可以实现 implements 多个接口 C++:可以实现多继承。 class A { … }; class ...
  • 对于抽象方法子类必须实现它。 对于虚拟方法子类可以重写也可以不重写。 因此,两者约束不同 二、实例代码如下: /* 声明一个抽象类 * 1.抽象类中可以包含变量 * 2.抽象方法中无法声明方法体 */ abstract class...
  • 011 抽象必须要有抽象方法吗?

    千次阅读 2021-02-28 14:53:53
    抽象类可以没有抽象方法)解释:抽象方法:java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现抽象方法与...
  • 抽象方法必须抽象类中吗

    千次阅读 2021-03-11 10:44:32
    抽象方法必须抽象类中吗2020-07-01 15:01:18文/叶丹1、抽象方法必须抽象类中,所以抽象类中的方法必须抽象方法。2、Final类中的属性和方法必须被final修饰符修饰。3、最终类不能派生子类,最终方法不能被...
  • 抽象必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  • 抽象方法就是abstract描述的方法,它本身不含实现,必须子类实现方法重载则是同一个方法名,但是参数类型或者参数个数不同。 理解了这个再看看你的问题。 如果你的子类的“对应的方法”有多个参数,那么,你这...
  • java中多个子类实现了父类的同一个抽象方法,那么我调用该抽象方法时如何确定走哪一个子类的同名方法呢? 答: 抽象类无法实例化,实例化的只能是子类。如Father是一个抽象父类,有一个talk抽象方法,和一个...
  • 抽象必须要有抽象方法吗?

    万次阅读 2019-07-22 14:36:51
    答案是:不必须。...3.一个类如果包含抽象方法,那么这个类必须抽象类,否则编译就会报错。 4.最关键的一点就是如果一个类是抽象类,那么这个类是不能被实例化的。 如下: public abstract cl...
  • 如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。3. 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定...
  • 如下代码,想得到这样结果execute AA before execute..C execute AA after 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { ...
  • Java抽象方法抽象

    千次阅读 2022-04-22 15:41:00
    如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法 public abstract void run(); } 把一个方法...
  • 一般是一个基类BaseActivity,里面有未实现方法initView,initController等等,并且这些方法在BaseActivity中的生命周期(Activity一定会走的生命回调,onCreate,OnResume等等)中使用;那么在子类Activity中重写这些...
  • 运行环境idea 2017.1.1spring 3.2.9.RELEASE需求背景需要实现一个功能,该功能有2个场景A、B,大同小异抽象一个抽象基类Base,实现了基本相同的方法BaseMethod,其中使用到Bean类中的方法A、B分别继承Base,重写Base...
  • 抽象类和抽象方法.pdf

    2019-08-06 09:21:33
    抽象类和抽象方法.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 451,615
精华内容 180,646
关键字:

抽象方法子类必须实现吗