zoukankan      html  css  js  c++  java
  • JavaSE复习日记 : 抽象类

    /*
     *                              抽象类
     *      抽象:
     *          面向对象的三大核心思想;
     *              封装: 封装,ppp是封装的一部分
     *              继承;
     *              多态: 父类的引用指向子类的对象
     *                  引用: 是指一个引用型变量
     *              有哪些变量?
     *                  成员变量;
     *                  构造方法的局部变量;
     *                  普通方法的局部变量;
     *                  立马声明立马使用的变量;
     *                  静态变量;
     *      什么是抽象类?
     *          就是用abstract关键字修饰的类就叫抽象类;
     *      什么是抽象方法?
     *          没有方法体的方法叫抽象方法,连{}都没有;抽象方法必须在修饰符列表中加上abstract这个关键字修饰;
     *      继承于抽象类的类:
     *          必须全部实现抽象类中的方法(就是加上方法体大括号),如果没有全部实现,就必须加上abstract修饰,即他也是个抽象类;
     *      抽象类和抽象方法的关系:
     *          含有抽象方法的类一定是抽象类;
     *          抽象类却不一定有抽象方法;
     *      抽象类没有抽象方法的目的:
     *          为了让这个抽象类不能被实例化;
     *      抽象方法的性质:
     *          1 抽象方法不能被实例化(还有一种方法也不能让类实例化,那就是构造方法私有化,private)
     *          2 虽然抽象方法不能被实例化,但是仍然有构造方法,这个是让子类创建对象用的(构造方法不能被继承,用super())
     *          3 抽象类中不一定有抽象方法,但是抽象方法必须写在抽象类中
     *          4 抽象类的继承类,必须把所有的抽象方法实现(全部需要加上方法体),否则子类还是个抽象类,需要用abstract修饰,也就是子类也不能直接被实例化
     *
     *          注意:抽象类是不能使用final修饰的,因为抽象类的目的就是为了继承,而final修饰的类不能被继承
     *      抽象方法可以用final修饰吗?
     *          abstract和final不能同时出现,抽象方法不能用final修饰,因为抽象方法的目的是被覆写,而final修饰的方法不能被覆写;
     *
     *          还有就是,子类必须实现抽象类的所有的"抽象"方法才行,而不是用abstract修饰的方法呢?
     *              关于这个,代码中可以看出来;
     *
     */
    
    public class JavaSE{
        public static void main(String[] args){
            A a = new C();//这里是多态,用于父类引用指向子类对象
            a.move();
            a.eat();
            //再写一个
            //A o = new A();//这里是会报错的,我上面写过,抽象类是无法被实例化的,A是抽象类吧,当然不能被实例化;
        }
    }
    
    abstract class A{//抽象类吧
        public void eat(){//这个不是抽象方法吧,需要一定被覆写(实现)吗?
            System.out.println( "这是一个抽象类" );
        }
    
        public abstract void move();//注意:抽象方法是没有方法体的;
            
        A(){
            System.out.println( "A的构造方法" );
        }
    }
    
    abstract class B extends A{//B没有覆盖(或者说实现)A里面的move()方法,所以他依旧是一个抽象类,需要加上abstract;
        B(){
            System.out.println( "B的构造方法" );
        }
    }
    
    class C extends B{//C实现了A里面的所有方法吧,所以不用abstract修饰;
        C(){
            super();
        }
    
        public void move(){//A中的move()方法被覆写了
            System.out.println( "C不是抽象类" );
        }
    }
  • 相关阅读:
    有点感叹,陪伴一年多的py2终于换py3了
    一句话检测XSS
    Mongodb3.4异常无法启动的处理 Process: 6874 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=100)
    Hadoop完全云计算平台搭建
    MySQL ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 45, found 42. Created with MySQL 50560, now running 50729. Please use mysql_upgrade to fix this error.
    v-on(事件处理)
    javascript获取以及设置光标位置
    小程序图片处理
    vue api
    处理回车提交、ctrl+enter和shift+enter都不提交->textarea正常换行
  • 原文地址:https://www.cnblogs.com/yizhimichong/p/4804934.html
Copyright © 2011-2022 走看看