首页 > 其他分享 >abstract关键字以及与public,final,static的关系 day09

abstract关键字以及与public,final,static的关系 day09

时间:2024-08-05 22:06:01浏览次数:7  
标签:day09 Animal3 void public static 抽象类 abstract


    多态程序中,第一大前提要有继承关系。
    但是呢,比如上午写的动物案例,我们将狗,猫,猪这些具体的动物分别编写了一个类进行对应这都是没问题的。
    但是呢,动物本身应该是一个抽象的概念,我们在现实生活中其实是找到不到Animal的实例的。

    具体的事物,我们就可以使用java代码将其定义成一个class类,然后就可以new创建出该对象。
    针对抽象的事物,java也提供了一个关键字,可以将抽象的概念,定义成一个抽象的类,这个类将来不能进行new的。
    这个关键字:abstract

    abstract:抽象的
    可以修饰类,成员方法。

/*
具体实现的方法:指的是方法大括号方法体
抽象方法:指的是方法被abstract关键字修饰,没有具体的实现,连大括号都没有

     abstract:抽象的, 可以修饰类,成员方法。
     使用的注意事项:
        1、抽象类不能进行实例化
        2、抽象类中既可以存在具体的方法,也可以存在抽象方法,如果一个类中有抽象方法,这个类必须是抽象类
        3、抽象类可以被具体的类继承,但是如果是被具体的类继承的话,必须要重写抽象类中的所有抽象方法
        4、抽象类A继承抽象类B的时候,可以选择是否重写抽象方法,也可以都不重写,原因是上面的第2点
        5、抽象类无法进行实例化,但是却可以拥有构造方法,意义是为了将来父类做初始化,子类构造方法第一句话默认是super()
        6、抽象类中,可以存在变量,常量,静态的变量。


 */
//定义一个抽象的动物类
abstract class Animal3{
    int a = 10;
    final int b = 20;
    static int c = 30;

    Animal3(){
        System.out.println("这是抽象类Animal3的构造方法");
    }

    //具体的方法
    public void eat1(){
        System.out.println("吃");
    }
    //抽象方法
    public abstract void eat2();

    public abstract void fun1();
}

abstract class Animal31 extends Animal3{
    @Override
    public void eat2() {

    }
}

class Dog3 extends Animal3{
    @Override
    public void eat2() {
        System.out.println("吃肉");
    }

    @Override
    public void fun1() {
        System.out.println("好好学习,天天向上!");
    }
}

public class AbstractDemo2 {
    public static void main(String[] args) {
//        Animal3 anima3 = new Animal3();

        Dog3 d1 = new Dog3();
//        d1.eat2();
//        d1.fun1();

        Animal3 a1 = new Dog3();
        a1.eat2();
        a1.fun1();
        System.out.println(d1.a);
        System.out.println(d1.b);
        System.out.println(Animal3.c);

    }
}
/*
    abstract不能和哪些关键字共存
        private	冲突
        final	冲突
        static	无意义

    以后我们常见的修饰符组合:
        1、public static
        2、public abstract

 */

abstract class Demo2{
    //private修饰的方法不能被子类继承,但是abstract方法将来是要被重写的,冲突了
//    private abstract void fun1(); //非法的修饰符组合: abstract和private

    // final是不能被子类重写的,而abstract方法将来是要被重写的,也冲突了
//    public abstract final void fun1(); // 非法的修饰符组合: abstract和final

//    public static abstract void fun1(); // 非法的修饰符组合: abstract和static
}

public class AbstractDemo4 {
    public static void main(String[] args) {

    }
}

标签:day09,Animal3,void,public,static,抽象类,abstract
From: https://www.cnblogs.com/qiwei-bigdata/p/18344147

相关文章

  • 多态的可扩展性动物行为实例 day09
    packagecom.shujia.day09;importjava.nio.channels.Pipe;/*多态的好处1、提高了程序的维护性(由继承保证)2、提高了程序的扩展性(由多态保证)*/classAnimal{Stringname;intage;publicAnimal(){}publicAnimal(S......
  • 多态的转型,向下转型day09
    多态访问成员方法的弊端:多态的形式下,无法调用子类中特有的方法。解决方案:向下转型。语句定义格式:子类的类型对象名=(子类的类型)父类的变量;向下转型的理解曹操和曹植的故事,曹操是曹植的父亲,曹植是曹操的儿子class曹操{publicvoi......
  • 多态的概念,前提,注意事项以及访问成员的特点 day09
    多态:某一个事物在不同状态下的多种状态举例:1、学生是人,老师是人,医生是人。2、汽态的水是水,固态的水是水,液态的水是水在java中要实现多态的话,需要有3个前提:1、必须要有继承关系2、要有方法的重写(思考可否不重写?)......
  • Python - Abstract Base classes
    Wehaveseenthatifwehavetodefineagroupofclassesthathavesimilarfeaturesandshowcommonbehavior,wecandefineabaseclassandtheninherittheclassesfromit.Inthederivedclasses,wehavethechoicetoeitherusethebaseclassversion......
  • SQLServer 事务复制在发布端(publication)和订阅端(subscription)对应的数据库还原之后复
     书接上文,在一个正常的事务复制环境中,如果发生了数据库还原,事务复制会不会出问题,出问题之后又如何恢复,如果在不删除订阅发布重建的情况下,如何在现有基础上修复事务复制的异常,这个问题可以分为两部分看:1,如果publisher数据库发生了还原操作,事务复制会出现什么异常,该如何恢复?2,如......
  • Day09
    二进制0b八进制0十六进制0x最好避免使用浮点数进行比较float具有舍入误差接近但不等于所有的字符本质上还是数字强制转换的格式......
  • Css为例 Hugo博客框架编译时将Assets中未实际使用的文件引入Public
    今日作Hugo博客开发的过程中,想使用main.css作为其他css的入口,即项目仅引用main.css,子样式模块在main.css中引入。编译后发现public中仅有main.css,没有其他的css文件导致样式无法正常使用。遂寻找解决办法:在项目仅实际引用main.css的情况下,将其他css文件导入public。解决办法为引......
  • 论文阅读:BERT-Based Chinese Relation Extraction for Public Security
    模型框架包含一个BERT模型层(嵌入+编码+池化->得到句子的特征向量)、一个Dropout层(防止过拟合)。基于BERT的预训练模型BERT模型是通过注意力机制对训练集进行处理。然后,通过Embedding层和Encoder层加载预训练的词向量。最后,Pooling层使用BERT模型来训练两个句子。BERT嵌入层......
  • 解决LLaMA-Factory共享链接的创建问题--[To create a public link, set `share=True`
    问题引入LLaMA-Factory是一种简单有效的LLM微调工具。其所开发的由gradio驱动的webui更是提供了可视化微调,降低了微调大模型的门槛。然而,在使用llamafactory-cliwebui来创建可视化微调模块时,只能得到本地的网页链接:这种方法限制了webui模块在服务器或者autodl等租赁网站......
  • 设计模式-抽象工厂模式(Abstract Factory Pattern)
    设计模式-抽象工厂模式(AbstractFactoryPattern)  概要   记忆关键词:抽象接口  定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。  分析:如果待创建的产品非常多,我们不需要为每一个产品类配上一个工厂类,而是可以把这些产品进行分组。抽象......