精华内容
下载资源
问答
  • 抽象类、抽象方法怎么声明

    千次阅读 2017-08-30 11:12:01
    在java中关键字abstract 可用来修饰方法和类,表示“尚未实现含义: 抽象方法:[访问权限] abstract 返回类型 ...抽象方法必须声明在抽象类中,但抽象类也可以包含具体方法,可以有或没有抽象方法,在抽象类中还可
    在java中关键字abstract 可用来修饰方法和类,表示“尚未实现”的含义:
    抽象方法:[访问权限] abstract 返回类型 方法名([参数表] ); //无方法体
    该类只提供方法的声明,不提供方法的实现(无大括号)
    抽象类:[访问权限] abstract class 类名{…}
    说明:
    抽象方法必须声明在抽象类中,但抽象类也可以包含具体方法,可以有或没有抽象方法,在抽象类中还可以声明变量;
    父类中的抽象方法需要在子类中实现,如果子类没有实现抽象方法,则子类也成为抽象类;
    抽象类不能用new来进行实例化,否则会出现编译错误;但可以声明抽象类的引用,用来指向其具体子类的实例;
    构造方法 和 static 方法都不能声明为抽象的。(请思考其中的理由)
    展开全文
  • 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { public void A(); } abstract class A implements YY{ public void A() { ...
  • 笔者在实际生产有时会遇到需要自己生成 serviceImpl 方法,和需要用到工厂类的情况,下面先讲讲怎么用反射做工厂抽象父类 动作被抽象出来 public interface PayStrategy { void pay(double total); ...

    目录

    笔者在实际生产中有时会遇到需要自己生成 serviceImpl的 方法,和需要用到工厂类的情况,下面先讲讲怎么用反射做工厂类,

    抽象父类

    动作被抽象出来

    public interface PayStrategy {
    
        void pay(double total);
    
    }

    实现类

    public class EbankPay implements PayStrategy {
    
        public void pay(double total) {
            System.out.println("pay with ebankpay: " + total);
        }
    
    }

    枚举类

    public enum SectionEnum {
    
        alipay("com.xx.install.calc.model.alipay"),
        wechatpay("com.xx.install.calc.model.wechatpay"), 
        applepay("com.xx.install.calc.model.applepay");
    
        SectionEnum(String className) {
            this.setClassName(className);
        } 
        private String className;
    
        public String getClassName() {
            return className;
        }
    
        public void setClassName(String className) {
            this.className = className;
        }
    
    }

    生产方法

    利用反射获得父类

    public class StrategyFactory {
    
        public static PayStrategy getStrategy(String strategyType) throws Exception {
            String className = SectionEnum .valueOf(strategyType).getClassName();
            return (PayStrategy) Class.forName(className).newInstance();
        }
    
    }

    当然以上只是在工具类中适用,真正的 实际中可能会有 导出报表时,实现类中有大量的 注入的service,所以工具类的这一套就需要稍微换一换

    获取beans的类

    
    
    /**
     * Description: 工具类,用于普通类获取注册过的Bean 
     *
     */
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.NoSuchBeanDefinitionException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SpringContextUtil implements ApplicationContextAware {
        private final static Logger logger = LoggerFactory
                .getLogger(SpringContextUtil.class);
    
        private static ApplicationContext applicationContext; // Spring应用上下文环境
    
        // 下面的这个方法上加了@Override注解,原因是继承ApplicationContextAware接口是必须实现的方法
        @Override
        public void setApplicationContext(ApplicationContext applicationContext)
                throws BeansException {
            this.applicationContext = applicationContext;
        }
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        public static Object getBean(String name) throws BeansException {
            return applicationContext.getBean(name);
        }
    
        public static Object getBean(String name, Class requiredType)
                throws BeansException {
            return applicationContext.getBean(name, requiredType);
        }
    
        public static Object getBean(Class requiredType)
                throws BeansException {
            return applicationContext.getBean(requiredType);
        }
    
        public static boolean containsBean(String name) {
            return applicationContext.containsBean(name);
        }
    
        public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
            return applicationContext.isSingleton(name);
        }
    
        public static Class getType(String name)    throws NoSuchBeanDefinitionException {
            return applicationContext.getType(name);
        }
    
        public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
            return applicationContext.getAliases(name);
        }
    
    } 

    导出的父类

    
    public interface Handle{
    
        @SuppressWarnings("rawtypes")
        public List<Map> handleData(Map<String, String> map);  
    
    }

    实现的子类

    可以使用拼接的名字 ,每一个 导出都会 代入自己的唯一的标识,所以可以 根据传入的标识不一样进行处理

    @Component
    public class M107000015Handle implements Handle{
        private Logger logger = LoggerFactory.getLogger(getClass());
        @Resource
        private ContractService contractService; 
        @SuppressWarnings("rawtypes")
        @Override
        public List<Map> handleData(Map<String, String> map) {
            return contractService.YFQbuildData(map);
        }
    }

    实际使用

    String platCode=dbsource.getname();
    Handle handle = (Handle) SpringContextUtil.getBean(platCode+ "Handle");
    handle.handleData(data);
    展开全文
  • 所以我们 Java 不用多重继承,用多重实现,but,如果实现了两个接口,有相同名字的抽象方法,那不还是避免不了所谓“致命方块”吗?Friend 接口:public interface Friend { public abstract void play() ; ...

    看 HeadFirst Java 时,作者说,为了解决多重继承所引起的“致命方块问题”
    多重继承的“致命方块”问题
    所以我们 Java 不用多重继承,用多重实现,but,如果实现了两个接口中,有相同名字的抽象方法,那不还是避免不了所谓的“致命方块”吗?

    Friend 接口:

    public interface Friend {
        public abstract void play() ;
    
        public abstract void beFriendly();
    }

    Pet 接口:

    public interface Pet {
        public abstract void play() ;
    
        public abstract void beFriendly();
    }

    Dog 类实现了 Friend 和 Pet 接口:

    public class Dog implements Pet, Friend {
    
        @Override
        public void play() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void beFriendly() {
            // TODO Auto-generated method stub
    
        }
    }
    

    两个接口中的抽象方法的名字相同了,编译器怎么知道实现的是哪一个?2333333

    答案是无解。c# 中可以实现两个接口中的相同方法,并且可以清晰的调用它们两个方法,但 Java 不能。

    所以最好还是避免这种写法,Java 自带的接口不会出现这种问题,自己定义的接口要注意。如果非要解决这个的话,只有一种方法,用内部类:
    参考:http://bbs.csdn.net/topics/320080255

    public class Dog implements Friend {
    
        @Override
        public void play() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void beFriendly() {
            // TODO Auto-generated method stub
    
        }
    
        public class MultiDog implements Pet{
    
            @Override
            public void play() {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void beFriendly() {
                // TODO Auto-generated method stub
    
            }
        }
    }
    展开全文
  • 抽象类和抽象方法

    2017-07-29 11:07:12
    如果在本类有无法实现的一些功能,那么应该把本类声明成抽象类, 或者父类对于某些方法无法预知子类怎么使用,应该声明成抽象类抽象类不一定有抽象方法,但是一个类有抽象方法必然是抽象类 2、抽象类如何...
    抽象类:


    1、抽象类的定义?
    当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取。只抽取功能定义,而不抽取功能主体。
    如果在本类有无法实现的一些功能,那么应该把本类声明成抽象类,
    或者父类对于某些方法无法预知子类怎么使用,应该声明成抽象类。
    抽象类不一定有抽象方法,但是一个类有抽象方法必然是抽象类

    2、抽象类如何使用?
    如果子类继承父类,父类中有抽象方法,子类如果没有完全实现父类的抽象方法那么这个子类也会变成抽象类。
    抽象类不能实例化(不能new)
    遇到抽象类的使用规则是只能找子类实例化,如果没有子类声明一个类去继承它
    抽象类允许抽象方法和普通方法并存,原因是:可以给子类提供普通的方法调用

    3、抽象类在继承关系中的作用是什么?
    父类:抽象方法不用自己实现,对子类有着引导约束的作用
    子类:可以调用父类的非抽象方法,子类完成父类所有的抽象方法

    抽象类:

    用abstract关键字修饰的类,我们称之为抽象类。
    public abstract class 类名{

    }
    抽象方法定义:

    public abstract 返回类型 方法名称(参数列表);没有方法体(没有大括号{})


     抽象方法:

    用abstract修饰,没有方法体的方法体

       
     public abstract class  Animal{
          
        	public abstract void showInfo(String name);//抽象方法,没有方法体
          
        }



    注意:

    abstract 关键字,和哪些关键字不能共存。
    1. final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
    2. private: 抽象类中的私有的抽象方法,不被子类所知,就无法被重写。而抽象方法的出现就是需要被重写。
    3. static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。


    总结:

    抽象类必须使用abstract来修饰。
    抽象方法一定在抽象类中。
    不能直接使用new关键字来创建抽象类的对象(抽象类不能被实例化)。
    抽象类和一般类没有太大的不同,只是比一般类多个了抽象方法。就是在类中可以定义抽象方法。
    抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
    如果一个类中出现了抽象方法,则该类必须标记为抽象类。
    子类继承抽象类时,父类中的抽象方法可以实现也可以不实现,如果抽象方法没有被实现,则子类也必须标记为抽象类。
    展开全文
  • 我在网上查了相关解释如下:写匿名类别,系统给我们自动创建了实现类(这个大家都知道),这个实现类里自动重写了所有抽象方法,只是方法体是空。我虽然只重写了部分方法,但是其他方法已经被临时重写了只...
  • 抽象类和抽象方法 ​ 抽象类是指没有足够的信息去描述一个具体的对象 . 因此 抽象类也就没有对象可以创建了, 信息都...继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法
  • c++中的抽象类怎么定义的

    千次阅读 2020-11-03 11:27:45
    zhi并不是所有类都是用来描绘对象,如果一个类中没有包含足够信息来描绘一个具体对象,这样类就是抽象类。纯虚函数是在基类中声明虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法...
  • 文章目录Java之抽象类与抽象方法抽象...在Java里,也就是把各个具体的类中共有的方法提取出来,放到基类之中,而基类并不需要了解子类中该方法具体是怎么实现的,这个基类就是所谓的抽象类,这些不需要知道具体实现...
  • java基础-抽象类抽象方法欢迎来看我的博文抽象类抽象方法抽象类的方法怎么被调用 欢迎来看我的博文 你好!...子类必须实现抽象类中的抽象方法(即使是空实现)。 写法: public abstract class A...
  • c++抽象类实现OC中的协议

    千次阅读 2015-03-06 18:03:53
    A中要调用B中的方法,通过delegate(代理)调用协议的方法来实现。 下面看C++中怎么实现: 一、先定义一个协议类 该类是一个抽象类 #ifndef __AppDelegateCplus__AppProtocol__ #define __AppDelegateCplus__...
  • 抽象类与抽象方法

    2014-09-16 07:39:15
     * 在一个类中,如果有一个抽象方法,那么这个类必须是一个抽象类。  * 抽象类:  * 1.做封装,封装之后,没有实现,只做声明  * 2.不能够直接实例化,如果想实例化,必须实现抽象方法(相当于一个类...
  • 本文是学习抽象类,以及抽象类中静态字段,静态方法的知识。 我写本文前对抽象类理解: A 是为了继承需要,或者是为了多态需要,把具有类似行为一组概念写成一个抽象类,但是抽象类里面不实现任何行为,...
  • 然后用普通类继承这个抽象类,这个类中只需实现你想要实现的方法,这样就可以达到你的需要了。 举个一目了然的例子,看不懂算我输哈哈,前提要知道抽象类: public interface A { public void delete();
  • 抽象的意义 如果画一个圆,都知道该怎么画;如果画一个矩形,也知道该怎么画。但是如果要画一个形状,你该怎么画?...抽象类中可以存在抽象方法。抽象方法也是使用abstract关键字来修饰。抽象的方法是不完全
  • 为什么提示A构造方法错误? 你好,很高兴为你解答。 这段代码提示B构造函数错误。这是因为B继承A,B构造函数会自动调用A默认构造函数(即不带参数构造函数),但A没有定义默认构造函数,所以...
  • 抽象类 ---模板方法

    2020-12-05 12:19:14
    抽象类 抽象方法 没有方法体的方法,就是抽象方法。 abstract修饰符修饰 抽象方法只是用来定义规范的。...如果你这个类中的方法没有实现的意义,定义为抽象 子类继承了一个抽象类,必须重写(实现)抽
  • Java 中的抽象类和接口 1、参考资料 深入理解Java的接口和抽象类 Java抽象类与接口的区别 2、前言 有一次旁听面试的时候,听到面试官问了一...抽象类中的抽象方法没有方法体,需要使用 abstract 关键字修饰抽象方法
  • 模板模式抽象类实现

    2021-03-08 23:01:24
    // 在模板直接实现某些步骤的方法。通常这些步骤的实现算法是固定的,而且是不怎么变化的,因此可以将其当做公共功能实现在模板。 public final void dataInitialing() throws Exception{ //获取所有的public...
  • Java中的抽象类

    2016-04-17 20:12:00
    2、应用场景:a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法(抽象类约束子类必须有哪些方法,但并不关注子类怎么实现这些方法。)b、从多个具有相同特征...
  • 方法:通过关键字virtual 和 ...使用场景:抽象类适用于同一系列类,并且有需要被继承成员,而且,基类不需要被实现,只是抽象出了这个方法,并不清楚子类怎么实现,同时,抽象类也可以包括非抽象成员。如下例:
  • 如果父类中的方法有默认的事项,并且父类并且父类要被实例化,这是考虑将父类定义成一个普通类考虑用虚方法实现多态 ... 抽象类不能实例化(因为调用不到)抽象类与虚方法的区别是虚方法里有实现抽象类中没有实现...
  • 今天开发kotlin项目过程,因需要使用以前写好框架基类,实现其中抽象方法时,因为当前不需要考虑具体怎么实现方法,所以计划返回null处理,发现kotlin提示异常“Null can not be a value of a non-null type...
  • 接口和抽象类是面向对象设计最精妙最关键部分。 学编程重点:不是学,而是用。 抽象类: 函数成员没有被完全实现的类。(没有函数体。) abstract class Student { //只有返回值、函数名和参数列表,...
  • 在java抽象关键字为abstract,抽象类被创造出来就是为了继承,简单明了地告诉用户跟编译器自己大概是长什么样子。例如抽象类申明语法: abstract class Abc { abstract void fun(); } 抽象类有以下几个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 687
精华内容 274
关键字:

抽象类中的方法怎么实现