精华内容
下载资源
问答
  • java中抽象类继承抽象类 示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不太复杂的设计问题。 我想强调一下,这个问题和设计对于某些人来说似乎很明显...

    java中抽象类继承抽象类

    示例问题

    当我创建Java :: Geci抽象类AbstractFieldsGeneratorAbstractFilteredFieldsGenerator我遇到了一个不太复杂的设计问题。 我想强调一下,这个问题和设计对于某些人来说似乎很明显,但是在我最近与一位初级开发人员(我的儿子Mihály的交谈)中,我的文章比我的英语要好得多,意识到这个话题可能仍然有价值。

    无论如何。 我有这两个类,字段和过滤字段生成器。 第二堂课扩展了第一堂课

     abstract class AbstractFilteredFieldsGenerator 
                       extends AbstractFieldsGenerator {... 

    添加额外的功能,同时应为具体实现提供相同的签名。 这是什么意思?

    这些生成器使用反射帮助生成特定类的代码。 因此,他们处理的输入信息是Class对象。 字段生成器类具有一个抽象方法process() ,该方法将为每个字段调用。 它是从实现的方法中调用的,该方法遍历字段并分别对每个字段进行调用。 当具体类extends AbstractFieldsGenerator并由此实现此抽象方法时,它将被调用。 当更改相同的具体类以使其extends AbstractFilteredFieldsGenerator ,将仅为过滤的方法调用具体方法。 我想要一个设计,以便在具体课程中唯一需要更改的是更改名称。

    抽象类

    问题定义

    以更抽象的方式描述相同的问题:有两个抽象类AF以便F extends AF提供一些额外的功能。 两者都声明了具体类应实现的抽象方法m() 当具体的类C声明从C extends AC extends FC extends F时,方法m()的调用应更改,但类C不应进行其他更改。 从类A定义的方法p()调用方法m() 如何设计F

    这是什么问题?

    可以通过两种明显不同的方式来扩展A

    • F覆盖m()使它混凝土在实施额外的功能m()并调用新的抽象方法,说mx()
    • F使用提供额外功能的版本覆盖方法p() (在上面的示例中进行过滤),并调用仍然抽象的方法m()

    第一种方法不能满足由具体类C实施的签名应保持相同的要求。 第二种方法将A的已经实现的功能扔给垃圾并以不同的方式重新实现它。 实际上,这是可能的,但是肯定会进行一些复制/粘贴编程。 这是有问题的,让我不解释原因。

    问题的根源

    在工程中,当我们面对这样的问题时,通常意味着问题或结构没有得到很好的描述,解决方案位于完全不同的区域中。 换句话说,有些假设驱动我们的思维方式是错误的。 在这种情况下,问题在于我们假设抽象类提供了一个扩展“ API”来对其进行扩展。 请注意,API不仅可以调用。 对于抽象类,扩展该抽象类时要实现的API。 正如库可以为使用不同的方式提供不同的API(Java 9 HTTP客户端可以send()以及sendAsync() )一样,抽象(实际上也是非抽象的)类也可以提供不同的扩展方式。用于不同的目的。

    如果不修改A就无法编码F达到我们的设计目标。 我们需要一个A版本,该版本提供不同的API来创建具体的实现,并提供另一个(不一定是正交/正交)来创建静态抽象的扩展。

    在这种情况下,API之间的区别在于,具体实现的目标是在调用链的末尾,而抽象扩展则希望钩在调用链的最后一个元素上。 A的实现必须提供要挂接到调用链的最后一个元素上的API。 这已经是解决方案。

    我们在类F实现方法ma() ,我们希望p()调用我们的ma()而不是直接调用m() 修改A我们可以做到。 我们在A定义ma() ,然后从p()调用ma() p() A实现的ma()版本应毫不费力地调用m() ,以为A具体实现提供原始的“ API”。 Fma()的实现包含额外的功能(在示例中为过滤),然后调用m() 这样,任何具体的类都可以扩展AF并可以使用完全相同的签名实现m() 除了调用m()是与ma()的两个版本相同的代码外,我们还避免了复制/粘贴编码。

    如果我们希望类F具有更多抽象类可扩展性,则F::ma实现不应直接调用m() ,而应调用m()的新mf() m() 这样,新的抽象类可以覆盖mf()从而再次提供新功能并调用抽象m()

    带走

    1. 对抽象类进行编程非常复杂,有时很难清楚地了解谁在调用谁以及哪种实现。 如果您意识到这可能是一件复杂的事情,则可以克服这一挑战。 记录,可视化,讨论可以帮助您的任何方式。
    2. 当您不能解决问题时(在示例中,如何对F进行编码),您应该挑战环境(我们隐式地认为问题A的类A是不变的:“如何实现F ?”)。
    3. 避免复制/粘贴编程。 (面食包含大量CH,使您的代码变胖,动脉阻塞,最后,应用程序的心脏将停止跳动。)
    4. 尽管在本文中没有详细介绍,但是请注意,抽象层次越深,要清楚地了解谁来呼叫谁就越困难(另请参见第1点)。

    翻译自: https://www.javacodegeeks.com/2019/06/extending-abstract-classes-with-abstract-classes-in-java.html

    java中抽象类继承抽象类

    展开全文
  • /*  1 定义一个员工类 所有的子类都抽取(抽象类) Employee 属性:姓名 工号(生成get set ) 方法:工作 抽象 2 定义一个研发类员工 Develop abstract 继承Employee ...

           /*

              1 定义一个员工类  所有的子类都抽取(抽象类)  Employee
                          属性:姓名  工号(生成get  set  )
                          方法:工作  抽象
                2 定义一个研发类员工    Develop   abstract   继承Employee   
                        抽象类的方法  work();
                 3要求定义一个EE工程师类  工号  姓名  工作:开发拼多多
                 4 要求定义Android 工程师  继承研发部类  重写工作方法 开发手机端淘宝

          */

         //创建一个抽象员工类

     

        public abstract class Employee {

          //定义员工类的属性
             String name;
             int id;
       

        //生成get.   set方法
           public String getName() {
              return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public int getId() {
                return id;
           }

            public void setId(int id) {
                this.id = id;
          }
        //设置抽象方法
          public abstract void work();
    }

     

     

        //创建一个开发类继承员工类

        public abstract class Decelop extends Employee{
              //创建一个抽象方法
              public abstract void work();
        
        }

          创建一个javaEE普通类继承开发类

          public class EE extends Decelop{

                 //调用抽象方法
                public void work() {
                   //打印开发拼多多
                  System .out.println("开发拼多多");
            }

     

     

     

          //创建一个安卓类继承开发类
        public class Android extends Decelop{

            //调用开发类的抽象方法
              public void work() {
                //打印开发开发手机淘宝
                System.out.println("开发手机淘宝");
            }

        }

     

     

     

     

     

          //创建测试类测试

        public class Test {
              public static void main(String[] args) {
        
                  //调用安卓类
                  Android A=new Android();

            //添加姓名和 工号
                  A.setName("张无忌");
                  A.setId(15646);
            
                    //调用javaEE类
                    EE E=new EE();

              //添加姓名工号
                    E.setName("豆豆");
                    E.setId(12355);
            
                   //打印姓名工号
                  System.out.print(E.name+"    "+E.id+"     ");

              //的调用work方法
                  E.work();    
            
            
                  System.out.println();

              //打印姓名工号
                  System.out.print(A.name+"    "+A.id+"     ");

            //的调用work方法
                  A.work();
            
            }

        }

    转载于:https://www.cnblogs.com/hph1728390/p/10537863.html

    展开全文
  • 首先,要知道的一些知识: 接口必须通过类来实现它的抽象方法,类实现接口的关键字为implements。 ...一个类只能继承一个父类,但却可以实现多个接口。 //一个回调接口 public interface Down
    展开全文
  • 如果抽象类没有实现接口中的所有有方法(不用写方法体),那么A类继承抽象类后就必须重写抽象类没有实现的方法。所以为了方便的去使用个别方法,可以让抽象类去实现接口的所用方法(不用写方法体),这样A类就可以...
    当A类想要实现一个接口中个别方法是(不是所有方法),可以创建一个抽象类去实现该接口,然后在有A类去继承这个抽象类。
    注意:这个抽象类必须重写这个接口的所有方法,A类才可以实现其中的个别方法;如果抽象类没有实现接口中的所有有方法(不用写方法体),那么A类继承抽象类后就必须重写抽象类没有实现的方法。所以为了方便的去使用个别方法,可以让抽象类去实现接口的所用方法(不用写方法体),这样A类就可以随便(想写几 个就写几个)重写抽象类的方法了。
    展开全文
  • 一、接口类(面向对象开发的思想和规范)的多...其他两个tiger类和hawk类则不能满足(b)而以下代码确切定义每一个类,每个类的属性都都在类里面存在,这样写虽然可以满足前面的需求,但是不好的地方就是,重复的方法...
  • java-抽象类和继承抽象类

    万次阅读 2018-02-09 16:17:15
    抽象类和继承抽象类 抽象类不能直接实例化,需要创建一个指向自己的对象引用(其子类)来实例化 代码: public class Main { public static void main(String[] args) { /* People people = new People(); *...
  • 第六章 类的继承抽象类与接口通过本章的学习主要掌握以下知识点 类的继承 子类的创建 调用父类中特定的构造方法 在子类中访问父类的成员 覆盖 抽象类 接口 内部类与匿名类 包 本章的重点 类的继承 覆盖 抽象类 接口...
  • 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。 Shape类 abstract class Shape { public ...
  • 继承抽象类-源码

    2021-02-12 04:30:22
    这意味着每个字段都有一个getter,但没有一个setter。 油漆计算器 您的目标是为绘画计算器创建类。 计算器通过让客户输入墙的尺寸来工作。 然后,计算器让他们知道需要购买多少加仑油漆。 UI的大部分已经完成。 您...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _01 { class Program { static void Main(string[] args) ...
  • 创建抽象类Person,具有name属性,包含一个参数——姓名的构造方法,具备显示类信息的抽象方法display()。 创建Person的子类Student,属性包括姓名、年级、专业。重写父类的抽象方法。注意在类的继承中不能继承父类...
  • 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 PS:在设计模式中,“实现一个接口”泛指实现某个超类型(可以是类或接口)...1、创建产品抽象类 /**
  • 创建一个抽象类动物类以及以下几个接口:进食的接口、睡觉的接口、思考的接口、说话的接口。分别定义猫类、人类、鸟类继承动物类并选择实现上述的接口,并创建实例验证。 上代码 package ThirdDay; public abstract...
  • 抽象类继承接口

    2020-09-28 10:19:46
    一、抽象类继承接口可以不用完全实现接口中的方法或者不实现接口方法。 1、有利的地方:由于不用完全实现接口,可以实现我们需要的方法,这样就不用全部实现。 2、例子:装饰者模式来解释 (1)、首先创建一个Shape...
  • Java 继承抽象类

    2021-01-11 23:00:45
    Java 继承 与 抽象类继承抽象类 继承 1、一个类 从另一个类中派生而来,就是继承。 2、继承也是面向对象语言的三大特征之一。 面向对象的语言都具有三大特征,分别是 封装,继承,多态。 3、什么时候需要继承? 创建...
  • 创建一个子类继承父类,定义新变量并重写父类的方法 创建一个主类,在main方法中创建父类和子类的对象 练习代码如下: (记得放在同一个包里哦!!!) class One //创建父类 { String name; String sex; ...
  • 抽象类继承

    2012-10-03 18:13:28
    ]abstract class Type { //创建一个抽象类Type //声明数据成员 double height, width, length; //长,宽,高 String name; //名字 //定义抽象方法 abstract double area(); //...
  • 抽象类是用来捕捉子类的通用特性的,是被用来创建...一、什么是抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一...
  • 继承抽象类

    2019-06-23 20:23:38
    Java 是面向对象的高级编程语言,要...在一个已有的基础剩创建一个新的的过程 已有的我们称为父类(SuperClass) 新的我们称为子类(SubClass) 基本格式 父类 public class Fu{ 成员变量 成员方法 ...
  • 分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。1、继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。派生...
  • 继承是一种创建新的的方式,在python中,新建的可以继承一个或者多个父类,原始称为基类或超类,新建的称为派生或子类。 如果没有指定基类,python的会默认继承object,object是所有python的基类...
  • 在java中, 抽象类必须继承才能使用, 那么在autojs中怎样实现继承抽象类呢? java中的实现 创建一个抽象类 package com.yashu; public abstract class Employee { private String name; private String address; ...
  • 第六章 类的继承抽象类与接口;通过本章的学习主要掌握以下知识点 类的继承 子类的创建 调用父类中特定的构造方法 在子类中访问父类的成员 覆盖 抽象类 接口 内部类与匿名类 包 ;本章的重点 类的继承 覆盖 抽象类 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,167
精华内容 2,466
关键字:

创建一个类继承抽象类