精华内容
下载资源
问答
  • 抽象类可以不定义抽象方法
    千次阅读
    2021-03-16 10:48:07

    简单来说,

    接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,

    另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

    还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

    1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface.

    2.在abstract class

    中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是

    static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

    3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

    4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

    5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

    6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

    7.接口中的方法默认都是 public,abstract 类型的。

    更多相关内容
  • 本文实例讲述了Java抽象类和抽象方法定义与用法。分享给大家供大家参考,具体如下:一、Java抽象类1、抽象类的说明在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象...

    本文实例讲述了Java抽象类和抽象方法定义与用法。分享给大家供大家参考,具体如下:

    一、Java抽象类

    1、抽象类的说明

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

    抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

    由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

    父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

    在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    在Java语言中使用abstract class来定义抽象类。

    抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。

    2、抽象类的定义

    abstract class A{//定义一个抽象类

    public void fun(){//普通方法

    System.out.println("存在方法体的方法");

    }

    //不存在方法体的抽象方法

    public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰

    }

    3、抽象类的使用

    抽象类的使用原则如下:

    (1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;

    (2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;

    (3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;

    (4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

    package com.wz.abstractdemo;

    abstract class A{//定义一个抽象类

    public void fun(){//普通方法

    System.out.println("存在方法体的方法");

    }

    public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰

    }

    //单继承

    class B extends A{//B类是抽象类的子类,是一个普通类

    @Override

    public void print() {//强制要求覆写

    System.out.println("Hello World !");

    }

    }

    public class TestDemo {

    public static void main(String[] args) {

    A a = new B();//向上转型

    a.fun();//被子类所覆写的过的方法

    }

    }

    (1)抽象类的子类里面有明确的方法覆写要求,而普通类可以有选择性的来决定是否需要覆写;

    (2)抽象类实际上就比普通类多了一些抽象方法而已,其他组成部分和普通类完全一样;

    (3)普通类对象可以直接实例化,但抽象类的对象必须经过向上转型之后才可以得到。

    虽然一个类的子类可以去继承任意的一个普通类,可是从开发的实际要求来讲,普通类尽量不要去继承另外一个普通类,而是去继承抽象类。

    4、抽象类的使用限制

    (1)抽象类中有构造方法么?

    由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。

    并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。

    范例如下:

    package com.wz.abstractdemo;

    abstract class A{//定义一个抽象类

    public A(){

    System.out.println("*****A类构造方法*****");

    }

    public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰

    }

    //单继承

    class B extends A{//B类是抽象类的子类,是一个普通类

    public B(){

    System.out.println("*****B类构造方法*****");

    }

    @Override

    public void print() {//强制要求覆写

    System.out.println("Hello World !");

    }

    }

    public class TestDemo {

    public static void main(String[] args) {

    A a = new B();//向上转型

    }

    }

    执行结果:

    *****A类构造方法*****

    *****B类构造方法*****

    (2)抽象类可以用final声明么?

    不能,因为抽象类必须有子类,而final定义的类不能有子类;

    二、Java抽象方法

    用abstract修饰的方法,即抽象方法。并且,抽象方法不能有方法主体。格式如下:

    abstract void xxx();

    说明:

    一旦类中包含了abstract抽象方法,那类该类必须声明为abstract类。

    抽象类中不一定要包含abstrace方法。

    抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。

    任何子类必须重写父类的抽象方法,或者声明自身为抽象类

    范例:bstract关键字可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

    抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

    public abstract class Employee

    {

    private String name;

    private String address;

    private int number;

    public abstract double computePay();

    //其余代码

    }

    如果Salary类继承了上面的Employee抽象类,那么它必须实现computePay()方法:

    /* 文件名 : Salary.java */

    public class Salary extends Employee

    {

    private double salary; // Annual salary

    public double computePay()

    {

    System.out.println("Computing salary pay for " + getName());

    return salary/52;

    }

    //其余代码

    }

    【抽象类总结规定】

    抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

    抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

    构造方法,类方法(用static修饰的方法)不能声明为抽象方法。

    抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

    希望本文所述对大家java程序设计有所帮助。

    展开全文
  • 什么是抽象类?怎么定义

    千次阅读 2021-09-01 09:47:26
    什么是抽象类?怎么定义?这是属于java技术里面的一个知识点,本期教程就是围绕这个问题做的相关介绍,当定义一个类时,常常需要定义一些成员方法描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,在...

    什么是抽象类?怎么定义?这是属于java技术里面的一个知识点,本期教程就是围绕这个问题做的相关介绍,当定义一个类时,常常需要定义一些成员方法描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,在定义Animal类时,shout( )方法用于描述动物的叫声,但是不同动物的叫声是不同的,因此在shout( )方法中无法准确地描述动物的叫声。

    针对上面描述的情况,Java提供了抽象方法来满足这种需求。抽象方法是使用abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体。抽象方法的定义格式如下:

    abstract void方法名称 (参数);

    当一个类包含了抽象方法,该类必须是抽象类。抽象类和抽象方法一样,必须使用abstract关键字进行修饰。

    抽象类的定义格式如下:

    abstract class 抽象类名称{

    访问权限返回值类型 方法名称(参数){

    return [返回值] ;

    访问权限abstract返回值类型抽象方法名称(参数) ;

    //抽象方法,无方法体

    }

    从以上格式可以发现,抽象类的定义比普通类多了一些抽象方法,其他地方与普通类的组成基本上相同。

    抽象类的定义规则如下。

    (1)包含一个以上抽象方法的类必须是抽象类。

    (2)抽象类和抽象方法都要使用abstract关键字声明。

    (3)抽象方法只需声明而不需要实现。

    (4)如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。

    下面通过一个案例学习抽象类的使用,如文件4-10所示。
    在这里插入图片描述

    在文件4-10中,第2~5行代码是声明了一个抽象类

    Animal,并在Animal类中声明了个抽象方法 shout ( );第9~11行代码在子类Dog中实现父类Anima的抽象方法shout( );第17行代码通过子类的实例化对象调用shout( )方法。

    注意:

    使用abstract关键字修饰的抽象方法不能使用private修饰,因为抽象方法必须被子类实现,如果使用了private声明,则子类无法实现该方法。

    以上就是为大家介绍的Java教程之什么是抽象类?怎么定义?的相关内容,希望上面的介绍能够帮助正在学习Java技术的同学。想了解更多Java技术,欢迎关注小千,后期会继续分享更多Java知识。

    本文来自千锋教育,转载请注明出处。

    展开全文
  • 抽象类定义和使用方法

    千次阅读 2020-10-26 12:22:02
    抽象类: **1**、抽象类怎么定义? 在class前面加abstract关键字... **5**、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法可以被子类继承的,但是如果子类是非abstract类型的,则一定要进行实例化对象

    抽象类:

      **1**、抽象类怎么定义?
           在class前面加abstract关键字就行了
       **2**、抽象类是无法实例化的,无法创建对象,所以抽象类天生就是被用来继承的(生来就是当爹的)
       **3**、final和abstract不能联合使用,这两个关键字是对立的
       **4**、抽象类的子类也可以是抽象类,也可以是非抽象类
       **5**、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是可以被子类继承的,但是如果子类是非abstract类型的,则一定要进行实例化对象
       **6**、抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中。
       **7**、抽象方法怎么定义?   
       		public abstract void xxx();
       **8**、一个非抽象的类,继承抽象的类,必须将抽象类中的抽象方法进行重写/覆盖/实现
           public void xxx()                      {     }	
          //写代码时,能用多态就用多态	
       到目前为止,只是学习了抽象类的基础语法,一个类到底声明为抽象类还是非抽象类,写的代码多了,自然就理解了
       **
    

    面试题:java语言中凡是没有方法题的方法都是抽象方法。(×)

       object类中就有很多方法没有方法体,都是以“;”结尾的,但他们都不是抽象方法,例如:
       public native int hashCode();
       这个方法底层调用的C++写的动态链接库程序
       前面修饰符列表中没有abstrct,有一个native,表示调用JVM本地程序。
    
    //抽象类里面含有抽象方法
    // 接口:
    public class Abstract {
        public static void main(String[] args) {
            Animal a=new bird() ;//向上转型(自动类型转换)
            Animal b=new  cat();                        ///这就是面向抽象编程
                                 ///以后你就是调用a.xxx
                                ///a的类型Animal是抽象的
                                ///面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力
                                ///这就是编程思想符合OCP原则
            a.move();//在编译的时候move方法是父类的
            b.move();         //在运行的时候move方法是子类的
    
        }
    }
     abstract class Animal{
        public abstract void move();
    
    }
     class bird extends Animal{
        //需要将父类中继承过来的抽象方法进行覆盖/重写
        //这样才可以把抽象方法实现
        public void move(){
            System.out.println("鸟儿在飞翔");
        }
        //如果bird是抽象类的话,那么从Animal中继承过来的就不用重写/覆盖/实现
          //抽象方法必须出现在抽象类中
    
    }
    class cat extends Animal{
        public void move(){
            System.out.println("猫在床上走");
        }
    }
    

    .

    展开全文
  • 抽象类和抽象方法定义及讲解?

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

    千次阅读 2022-04-22 15:41:00
    // 定义抽象方法 public abstract void run(); } 把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以Person无法被实例化。并且编译器会报错...
  • Java抽象类/抽象方法定义及其特性详解

    千次阅读 多人点赞 2019-09-28 18:37:53
    定义抽象类的作用是将一类对象的共同特点抽象出来,成为代表该类共同特性的抽象概念,其后在描述某一具体对象时,只要添加与其他子类对象的不同之处,而需要重复类的共同特性。这样就使得程序概念层次分明,开发更...
  • 抽象类不能创建对象,其创建对象没有意义,但是抽象类可以保存一类事物具备的共同属性和行为,让子类进行继承。 抽象类的构造方法不是给自己用的,而是为了让子类调用构造方法创建对象时初始化用的 ...
  • Java抽象类和抽象方法如何定义

    千次阅读 2020-11-18 23:46:06
    具体的类是可以被初始化为对象的,在类的声明前面加上抽象类关键词abstract,则该类就会成为一个抽象类。 abstract public class Canine extends Animal { public void roam () {} } 编译器不会让你初始化抽象类,...
  • 同时抽象方法所在的类也要用abstract定义,表示抽象类。 举例:定义一个抽象类抽象类中没有具体实现,因此抽象类不能直接实例化对象 abstract class Person{ private String name;//姓名属性 ...
  • 它们的语法区别:1)接口能有构造方法抽象类可以有。2)接口能有方法体,抽象类可以有。3)接口能有静态方法抽象类可以有。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。忽然有此...
  • 一、抽象类与抽象方法定义 抽象类:只在普通类的基础上扩充了一些抽象...抽象类中包含抽象方法,抽象方法不包含方法体,即抽象类中没有具体实现,所以抽象类能直接产生实例化对象 举例:创建一个简单的抽象...
  • 抽象类一定有抽象方法吗?我来说说吧,静态是属于字节码的;一个抽象类可以没有抽象方法,只是为了让别人来实例化它; 以上两点可以说明,...总结就是:抽象类可以定义静态方法,只是抽象类自己能实例化,所...
  • 抽象方法必须在抽象类中吗

    千次阅读 2021-03-11 10:44:32
    抽象方法必须在抽象类中吗2020-07-01 15:01:18文/叶丹1、抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。2、Final类中的属性和方法都必须被final修饰符修饰。3、最终类能派生子类,最终方法不能被...
  • 抽象类定义方法的重写

    千次阅读 2020-11-10 21:04:22
    //抽象类可以看作是一个具体的类(通俗一点讲就是:无法详细描述的类(事物),只能描述个大概) //例如:人类、动物、水果等,或者常见的有:英雄、商品,它们的共同特征就是有多个种类。 //结合上面所说的,...
  • Java抽象类和抽象方法的使用与定义

    千次阅读 2019-10-31 17:06:47
    抽象类和抽象方法定义 抽象方法:就是加上abstract关键字,去掉{},直接;结束 抽象类:抽象方法所在的类,必须是抽象类。在class之前加上abstract即可 package StudyClass; public abstract class Fu { public...
  • 抽象类定义

    千次阅读 2020-12-12 18:32:01
    抽象类定义 抽象类 抽象类表示一个抽象概念 抽象类能产生实例化对象,必须通过子类实例化。因此抽象类必须有子类的出现。 抽象类能够明确的定义子类需要覆写的方法。 抽象类使用 abstract 关键字声明。 抽象类中...
  • 而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类能有静态的抽象方法。 定义抽象方法的目的是重写此方法,但如果定...
  • 抽象类中是否一定要有抽象方法

    千次阅读 2020-06-11 09:20:14
    抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也能再实例化,即能直接构造一个该类的对象。 如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则...
  • java抽象类和抽象方法

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

    千次阅读 2021-03-06 06:39:35
    Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。...抽象类除了能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所...
  • C#中抽象类与抽象方法的详解

    万次阅读 2020-06-17 17:41:11
    抽象类的含义是什么? 抽象类怎么创建? 抽象类的规则有哪些? 抽象方法? 抽象类被运用的意义是什么?
  • 接口是我们常用的,抽象类好像并不是怎么常用,但这并代表他重要,他可以被继承,可以有构造方法可以给类中的成员变量赋初值,接口就没有这样的功能。       抽象类的出现使得...
  • 011 抽象类必须要有抽象方法吗?

    千次阅读 2021-02-28 14:53:53
    抽象类可以没有抽象方法)解释:抽象方法:java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而需要实现。抽象方法与...
  • class Shape: def __init__(self,areas=0,primeters=0): self.areas=areas self.Primeters=primeters def GetPrimeter(self): pass def GetArea(self): pass class Triangle(Shape): def __init__(self,said...
  • JAVA 抽象类,抽象方法

    千次阅读 2021-04-22 21:18:22
    抽象类其实就是给他的所有子类定义了一套模板。子类可以在这个模板上进行扩展。通过抽象类可以严格的限制了子类的设计。如一个抽象类Animal中有一个抽象方法run.public class Animal{public abstract void run();}...
  • C#中的抽象类、抽象属性、抽象方法

    千次阅读 多人点赞 2020-06-10 00:51:31
    前言:本博文讲述了C#面向对象中的抽象类,通过本博文的阅读,读者可以掌握C#抽象类的概念、应用、好处以及一些特性。 文章目录一、抽象类概念二、示例讲解三、抽象类的作用四、使用抽象类的...我们自然不可以使用不完
  • ② 成员 : 抽象类中既可以定义正常属性和方法 , 又可以定义抽象的属性和方法 ; ③ 继承 : 抽象类可以继承抽象类 , 抽象类可以继承正常类 , 正常类可以继承抽象类 ; ④ 重写 : 抽象类可以使用抽象方法重写正常...
  • C#抽象类和抽象方法(很详细,你值得拥有!!!)

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 974,960
精华内容 389,984
关键字:

抽象类可以不定义抽象方法