精华内容
下载资源
问答
  • 抽象类和抽象方法
    千次阅读
    2020-08-20 16:21:09

    一、抽象(abstract)的使用

      当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。

      我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在以后子类进行重用,进行具体化。这样,抽象类也就诞生了。

      例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。

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

     

    package javastudy;
    
    public class AbstractDemo1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
        }
    }
    
    // 这就是一个抽象类
    abstract class Animal {
        String name;
        int age;
    
        // 动物会叫
        public abstract void cry(); // 不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性。抽象方法在父类中不能实现,所以没有函数体。但在后续在继承时,要具体实现此方法。
    }
    
    // 抽象类可以被继承
    // 当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。
    class cat extends Animal {
        // 实现父类的cry抽象方法
        public void cry() {
            System.out.println("猫叫:");
    
        }
    }

    二、用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。

     

    三、抽象方法不能有方法主体。格式如下:

    abstract void xxx();

     (1)格式,没有方法体,包括{ },例如  public abstract void dink();

     (2)抽象方法只保留方法的功能,具体的执行,交给继承抽象类的子类,由子类重写改抽象方法

     (3)如果子类继承抽象类,并重写了父类的所有的抽象方法,则此子类不是抽象类,可以实例化的

     (4)如果子类继承抽象类,没有重写父类中所有的抽象方法,意味着子类中还有抽象方法,那么此子类必须必须声明为抽象的。

     

    四、抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。同时如果不继承就更没意义了,所以一般抽象类都要被继承。

     

    五、抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。

     

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

     

    七、无抽象属性

    更多相关内容
  • 抽象类和抽象方法

    千次阅读 2018-08-12 19:46:26
    含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete...

    摘自牛客网总结

    含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 
    接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。 
    下面比较一下两者的语法区别: 
    1.抽象类可以有构造方法,接口中不能有构造方法。 
    2.抽象类中可以有普通成员变量,接口中没有普通成员变量 
    3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 
    4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 
    eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 
    5. 抽象类中可以包含静态方法,接口中不能包含静态方法 
    6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。 
    7. 一个类可以实现多个接口,但只能继承一个抽象类。 
    下面接着再说说两者在应用上的区别: 
    接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用, 

    例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下: 

     

    package com.lei;
     
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public abstract class BaseServlet extends HttpServlet {
     
     /**
     * serialVersionUID属性概述
     * 
     */
     private static final long serialVersionUID = 1L;
     
     public final void service(HttpServletRequest request,
     HttpServletResponse response) throws IOException, ServletException {
     // 记录访问日志
     // 进行权限判断
     if (true)// if条件里写的是“具有权限”
     {
     try {
     doService(request, response);
     } catch (IOException e) {
     // 记录异常信息
     }
     }
     
     }
     
     protected abstract void doService(HttpServletRequest request,
     HttpServletResponse response) throws IOException, ServletException;
    }

     

    实现类

    package com.lei;
     
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class MyServlet extends BaseServlet{
     
     /**
     * serialVersionUID属性概述
     * 
     */
     private static final long serialVersionUID = 1L;
     
     @Override
     protected void doService(HttpServletRequest request,
     HttpServletResponse response) throws IOException, ServletException {
     // TODO Auto-generated method stub
      
     }
     
    }

     

    展开全文
  • java抽象类和抽象方法

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

    一、什么是抽象类和抽象方法

    没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类,抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法。抽象类的使用一般通过继承来实现

    二、为什么需要抽象类和抽象方法

    引用抽象方法和抽象类,是java提供的一种语法工具,引导使用者正确的使用它们,减少误用。相当于对子类进行一定限制。

    三、抽象类和抽象方法的语法规则及其注意事项

    抽象类抽象方法必须被abstract修饰。

    抽象类中可以有普通方法,但是有抽象方法的类必须是抽象类。抽象类中的普通方法因为不能被创建对象,所以不能使用这个普通方法。

    抽象类除了不能实例化对象之外,类的其它功能依然存在。

    抽象方法中可以有被static修饰main方法,并且可以执行。

    一个类在继承抽象类后,必须实现抽象类中定义的所有抽象方法。除非它自己也声明为抽象类。

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

    四、抽象类和抽象方法的实现案例

    1、抽象类中可以有普通方法,但是有抽象方法的类必须是抽象类。

    public abstract class Demo01 {

    public abstract void run();

    public void test(){}

    }

    //编译通过,不报错

    public class Demo01 {

    public abstract void run();

    public void test(){}

    }

    //报错:

    Class 'Demo01' must either be declared abstract or implement abstract method 'run()' in 'Demo01'

    Abstract method in non-abstract class

    2a03c1ce46b001404d74cb483c53dfed.png

    2、抽象类除了不能实例化对象

    public abstract class Demo01 {

    public abstract void run();

    public static void main(String[] args) {

    Demo01 demo01=new Demo01();

    }

    }

    e391d9aa2a3f1229ee45ef3aa8a40ae4.png

    3、抽象方法中可以有被static修饰main方法,并且可以执行。

    public abstract class Demo01 {

    public abstract void run();

    public static void main(String[] args) {

    System.out.println("抽象类中的main方法");

    }

    }

    //输出结果:抽象类中的main方法

    4、抽象类的使用一般通继承来实现,且子类中要么对抽象类的方法进行重写,要么声明子类也为抽象类

    public class Demo02 extends Demo01{

    @Override

    public void run() {

    }

    }

    abstract class Demo03 extends Demo01{

    }

    //Demo02和Demo3均能编译通过。

    5、抽象类中的静态方法可以用类名.方法名的方式调用

    e48ac6d43d5525c72074397ed91e40cc.png

    6、抽象的实例:

    有抽象类Father,和抽象方法run()。

    public abstract class Father {

    private String name;

    private int age;

    private char sex='男';

    public int money=100_000;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    public char getSex() {

    return sex;

    }

    public void setSex(char sex) {

    this.sex = sex;

    }

    abstract void run();

    public void say(){

    System.out.println("这是父类普通方法");

    }

    public static void go(){

    System.out.println("这是父类静态方法");

    }

    }

    有子类Son继承了抽象类,重写了父类的抽象方法run

    public class Son extends Father{

    private double salary;

    @Override

    void run() {

    System.out.println("子类重写了父类的方法run");

    System.out.println(super.getSex());

    super.say();

    }

    public static void main(String[] args) {

    Son son=new Son();

    son.run();

    System.out.println(son.getSex());

    //System.out.println(super.getSex()); //错误

    son.setAge(47);

    System.out.println(son.getAge());

    son.setName("ThreePure");

    System.out.println(son.getName());

    //调用父类的公有属性

    System.out.println(son.money);

    //使用继承于父类的方法

    son.say();

    }

    }

    运行结果:

    子类重写了父类的方法run

    这是父类普通方法

    47

    ThreePure

    100000

    这是父类普通方法

    尽管我们不能实例化一个 Father类的对象,但是如果我们实例化一个 Son 类对象,该对象将从 Father 类继承 成员方法,且通过该方法可以设置或获取成员变量。

    五、抽象类的其他补充吗

    抽象类是否有构造器:

    e4dc66d994535459d7bdc270574d7b1e.png

    从图中我们可以知道抽象类也是有构造器的,并别在子类创建对象时被调用。

    public abstract class Demo3 {

    public Demo3() {

    System.out.println("抽象类的构造方法");

    }

    }

    public class Demo4 extends Demo3{

    public static void main(String[] args) {

    Demo4 demo4 =new Demo4();

    }

    }

    //抽象类的构造方法

    2、final与abstract的矛盾

    final关键字可以修饰类、方法、变量。final修饰的类不能被派生;final修饰的方法,禁止子类重写。所以我们可以看出,final和abstract不能一起使用。

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

    ef1db7eeaea5b0eb959f00a80b959e63.png

    展开全文
  • Java抽象类和抽象方法归纳总结

    千次阅读 2020-06-11 12:26:24
    这篇文章从不同角度归纳介绍了抽象类的知识点及其注意事项。文中引用的具体例子在这里:抽象类的一个例子 Triangle类是继承自抽象类GeometriObject的具体子类 GeometriObject中包含两个...抽象方法和抽象类之间的关

    这篇文章从不同角度归纳介绍了抽象类的知识点及其注意事项。文中引用的具体例子在这里:抽象类的一个例子

    • Triangle类是继承自抽象类GeometriObject的具体子类
    • GeometriObject中包含两个抽象方法:getPerimeter,getArea/
    • Triangle中实现了这两个方法

    好了,进入正题。

    一,抽象类关键点

    抽象类不可以用于创建对象。 抽象类可以包含抽象方法, 这些方法将在具体的子类中实现。

    二,抽象类与抽象方法的定义

    1.抽象类

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

    • 抽象类设计得非常抽象, 以至于它都没有任何具体的实例。

    • 在类头使用 abstract修饰符表示该类为抽象类
      例如:abstract class GeometricObject

    2.抽象方法

    GeometricObject就成为一个抽象类。

    • 抽象方法指一些只有方法声明,而没有具体方法体的方法。
    • 在方法头中使用 abstract 修饰符表示
      例如:public abstract double getPerimeter();

    在UML图形记号中,抽象类和抽象方法的名字用斜体表示.

    三,注意事项

    1.关于抽象类的构造函数的问题

    1. 抽象类的构造方法定义为 Protected, 因为它只被子类使用。
    2. 创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。

    2.抽象类与常规类的区别

    1. 抽象类和常规类很像,但是不能使用new 操作符创建它的实例。
    2. 抽象类也不能使用 new 操作符来初始化的。 但是,仍然可以定义它的构造方法, 这个构造方法在它的子类的构造方法中调用。
      例如, CeometricObject 类的构造方法在 Triangle 类中调用:
    public Triangle(String color, boolean filled, double side1, double side2, double side3) {
            super(color, filled);
            this.side1 = side1;
            this.side2 = side2;
            this.side3 = side3;
        }
    
    
    1. 不能使用 new 操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。
      例如, 下面的语句创建一个元素是 CeometricObject 类型的数组是正确的:
      GeometricObject[] objects = new CeometricObject[10];
      然后可以创建一个 CeometricObject 的实例, 并将它的引用赋值给数组,如下所示:
      Objects[0] = new Triangle();

    3.抽象方法的定义和实现问题

    1. 抽象方法在抽象类中只有定义而没有实现。 它的实现由子类提供
      例如:抽象类CeometricObject 中两个抽象方法:
    //两个抽象方法
        public abstract double getArea();
        public abstract double getPerimeter();
    
    1. 抽象类拓展的非抽象子类必须将此抽象类的所有抽象方法重写
      例如:CeometricObject 的子类Triangle类
     //一定要重写实现抽象父类中的抽象方法
        @Override
        public double getArea() {
            double s = (side1 + side2 + side3)/2;
            return Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
        }
    
        @Override
        public double getPerimeter() {
            return side1+side2+side3;
        }
    
    
    1. 如果抽象父类的子类不能实现所有的抽象方法, 那么子类也必须定义为抽象类。也就是子类可以覆盖父类的方法并仍将它定义为 abstract

    2. 抽象方法不能定义在非抽象类中。

    3. 还要注意到,抽象方法是非静态的

    4.抽象方法和抽象类之间的关系

    1. 只要包含抽象方法,该类必须声明为抽象类。
    2. 但是抽象类可以不包含抽象方法

    5.抽象类父类和子类的关系

    1. 父类是抽象类
      • 子类是非抽象类,那么子类必须重写实现父类中的所有抽象方法
      • 子类也是抽象类,子类不必实现父类中的所有抽象方法
    2. 子类是抽象类。父类既可以是抽象的也可以是具体的。
      例如, Object 类是具体的, 但是它的子类如 CeometricObject 可以是抽象的

    友情链接——纯干货
    Java面向对象,这些你一定想再来复习复习:

    1. Java继承入门全部知识归纳总结
    2. Java多态基础知识完整的归纳总结
    3. Java接口入门全部知识总结
    4. Java可见性修饰符public/private/protected的归纳总结
    展开全文
  • 七、java中的抽象类和抽象方法详解

    千次阅读 2020-12-24 10:53:56
    为了表示『抽象』这一概念,我们使用abstract关键字表示——abstract类是抽象类,abstract方法是抽象方法。   2、什么是抽象类、抽象方法? 类用于描述现实生活中一类事物。类中有属性、方法
  • C#抽象类和抽象方法(很详细,你值得拥有!!!)

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

    千次阅读 2022-02-08 15:50:04
    有时候将一个类设计的非常抽象,以至于他没有具体的实例,这样的类叫做抽象类。 abstract关键字的使用 1、abstract可以用来修饰结构、类、方法 2、一旦父类抽象了,就不可以再实例化造对象 ps:父类还是应该提供...
  • 抽象类和抽象方法定义及讲解?

    千次阅读 多人点赞 2019-02-26 17:26:23
    首先说抽象类: (1)抽象类只能作为其他类的基类,它不能直接实例化,对抽象类不能使用new 操作符。 (2)抽象类中可以包含抽象成员,但非抽象类中不可以。...(1)抽象方法必须声明在抽象类中。 ...
  • 抽象方法不能有方法体,即不能有{},子类必须重写抽象类中的所有抽象方法,同时子类也可以向上转型无偿继承父类的非抽象公开方法。 3.抽象类中不一定包含抽象方法,但包含抽象方法的类一定是抽象类 4.构造方法和...
  • 一、使用abstract修饰符修饰的类被称为抽象类; 抽象类不能实例化对象,只能... 抽象方法不能有方法体,子类必须重写抽象类中所有的抽象方法;三、抽象类中不一定包含抽象方法,但包含抽象方法的类一定是抽象类;...
  • Java抽象方法和抽象类

    千次阅读 2022-04-22 15:41:00
    1、抽象方法 如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去...因为这个抽象方法本身是无法执行的,所以Person无法被实例化。并且编译器会报错无法编译Person,因为它包含抽...
  • 定义抽象类动物Animal,在其中定义捕食抽象方法predation()非抽象进食方法eat(),并在进食方法中调用捕食方法。 创建3个动物类,分别是老虎类Tigger、猴子类Monkey狼类Wolf,定义动物抽象父类,在这.
  • Java中抽象类和抽象方法的区别

    千次阅读 2017-03-02 10:47:18
    抽象类:含有抽象方法的类就叫抽象类抽象类中的抽象方法必须被实现!如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类抽象类中的普通方法,可以不必实现。用abstract来修饰一个类时,这个类叫做...
  • JAVA中的抽象类和抽象方法

    千次阅读 2019-03-15 17:10:15
    (1)如果一个类中有一个方法是抽象的,那么这个类就必须是抽象类。 (2)抽象类也必须使用abstract来修饰 (3)抽象类不能被实例化,只能被继承 (4)继承一个抽象类,必须重写其抽象方法,否则该类也会被抽象化。 ...
  • C#抽象类和抽象方法

    千次阅读 2018-10-13 17:59:18
    定义格式: abstract class 类名{ ..... } 抽象类的使用规定: 1.抽象类只能作为其他类的基类,它不能直接被实例化。...5.如果一个非抽象类的基类是抽象类,那么必须要通过覆盖来实现所有继承而来的抽象方...
  • Java抽象类和抽象方法详解

    千次阅读 2018-02-24 02:03:51
    Java抽象类和抽象方法详解一 . 由来 当编写一个类时,常常会给这个类定义一些方法来描述这个类的行为方式,通常这些方法都有相应的具体的方法体,但是,在某些情况下,某个基类只是知道其子类应该包含怎样的方法,...
  • Java抽象类和抽象方法如何定义

    千次阅读 2020-11-18 23:46:06
    抽象类 具体的类是可以被初始化为对象的,在类的声明前面加上抽象类关键词abstract,则该类就会成为一个抽象类。 abstract public class Canine extends Animal { public void roam () {} } 编译器不会让你初始化...
  • python 如何定义抽象类和抽象方法

    千次阅读 2020-01-10 13:00:05
    文章目录(一)python 如何定义抽象类和抽象方法(二)python中的多态(三)类的组合 (一)python 如何定义抽象类和抽象方法 在python中类 通过继承metaclass = ABCmeta类来创建抽象类抽象类是包含抽象方法的类,...
  • C#中抽象类与抽象方法的详解

    万次阅读 2020-06-17 17:41:11
    抽象类的含义是什么? 抽象类怎么创建? 抽象类的规则有哪些? 抽象方法? 抽象类被运用的意义是什么?
  • 抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  • Python中的抽象类和抽象方法

    千次阅读 2020-03-14 11:02:45
    在python中类 通过继承metaclass =ABCmeta类来创建抽象类抽象类是包含抽象方法的类,其中ABCmeta类(Metaclass for defining abstact baseclasses,抽象基类的元类)是所有抽象类的基类。 定义了抽象类后,在要实现...
  • Java的抽象方法和抽象类

    千次阅读 2019-06-08 11:43:15
    抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类抽象类里可以没有抽象方法抽象类和抽象方法的规则: 抽象类必须使用abstract修饰符来修饰,抽象方法必须使用abstract修饰符...
  • Java中的抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java中的抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • Java抽象类和抽象方法的使用与定义

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

    千次阅读 热门讨论 2014-02-26 14:55:44
    一、抽象类和抽象方法的概念  在基类中的虚方法有时候不可能被调用到,而只是表达一种抽象的概念,用以为它的派生类提供一个公共的界面。 C#中引入了抽象类(abstract class)的概念,可以将它定义成抽象方法。将该...
  • Java----多态+抽象类+抽象方法+接口

    千次阅读 2021-02-07 17:31:56
    Java基础创作日记 Day05 时间:2021年2月7日下午 阴 昨天的前天的总结少了点东西,今天...含有抽象方法的类必须要用abstract修饰,用abstract修饰的类叫做抽象类抽象类可以不含有抽象方法 语法:abstract class 类名.
  • 抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的...在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,424,483
精华内容 569,793
关键字:

抽象类和抽象方法

友情链接: xinxifenlei.zip