• 十、抽象类



    1.抽象类出现的原因
    当多个类中出现相同的功能,但是功能主体部分不同,这时可以向上抽取的【只抽取功能的定义部分-----方法的声明部分,而不抽取功能的主体部分-----方法的实现部分】

    明确的说,抽象的存在的意义是:就是为了被继承

    2.抽象类的使用【见代码AbstractUsageDemo.java】

    class AbstractUsageDemo 
    {
        public static void main(String[] args) 
        {
            //3.抽象类不能实例化对象
            //错误: Check是抽象的; 无法实例化
            //Check c = new Check();
            //c.show();
    
            SubCheck sc = new SubCheck();
            sc.show();
            sc.display();
    
            //Check.show11();
    
        }
    }
    //1.定义一个抽象类
    //父类
    abstract class Check
    {    
        //8.抽象类中可以定义成员变量,为了给子类提供
        String name;
        int age;
    
        //2.在抽象类中使用abstract关键字修饰的方法被称为抽象方法
        //抽象方法的特点:只有声明,没有实现
        abstract public void show();
    
        //6.如果一个抽象类中有多个抽象方法,但是在子类中只重写了部分抽象方法,那么子类仍然是一个抽象类,无法实例化对象
        //错误: SubCheck不是抽象的, 并且未覆盖Check中的抽象方法show22()
        abstract public static void show11();
        abstract public void show22();
    
        //5.抽象类中也可以定义普通方法
        public void display() {
    
        }
    
        //7.抽象类有构造方法,存在的作用:为了被子类的构造方法调用
        public Check() {}
        public Check(String name,int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    //子类
    class SubCheck extends Check
    {
        //4.如果一个子类对象要调用抽象类【父类】中的抽象方法,则必须在子类中重写这个抽象方法
        @Override
        public void show() {
            System.out.println("hsugh");
        }
        @Override
        public void show11() {
            System.out.println("hsugh");
        }
        @Override
        public void show22() {
            System.out.println("hsugh");
        }
    
        //构造方法
        public SubCheck() {}
        public SubCheck(String name,int age) {
            super(name,age);
        }
    }


    3.总结
    1>抽象类的特点
    a.使用关键字abstract修饰的类
    b.不可以使用new关键字实例化对象
    c.可以定义抽象方法,也可以定义普通方法
    d.抽象类中方法如果想要被调用,只能子类中重写这个方法,然后创建子类对象进行调用
    e.子类必须重写父类中所有的抽象方法,否则,子类仍然是一个抽象类
    f.抽象类就是为了继承而生,所以一般情况下,抽象类在程序中扮演者父类的角色
    g.抽象类是由自己的构造方法【成员变量】的,但是这些构造方法的作用主要为了提供给子类的构造方法调用

    2>抽象方法的特点
    a.抽象方法只能存在于抽象类中
    b.在抽象类中,被abstract修饰的方法
    c.只能声明,没有实现

    3>抽象类和普通类的区别【面试题】
    a.相同点:都是用来描述事物的,都可以定义成员变量和构造方法,普通方法
    b.抽象类中除了普通方法之外,还可以定义、抽象方法
    c.普通类可以继承也可以不被继承,但是抽象类一定要被继承,否则其中的抽象方法将永远无法实现
    d.普通类可以使用new实例化对象,但是抽象类不行

    扩展:abstract和哪些修饰符不能共存?
    a.final 原因:final修饰类意味着这个类不能被继承,但是抽象类存在的意义就是为了被继承【final修饰的方法不能被重写,但是抽象方法只能被重写之后子类对象调用】
    b.private 原因:private修饰方法意味着这个方法只能在当前类中能被调用,但是抽象方法不能实现的就要靠子类来实现
    c.static 原因:使用static修饰的方法可以使用对象. 和类名. 的方式调用【对象.直接排除】,调用一个方法的目的为了实现相应的方法体,但是抽象方法没有方法体,抽象类直接使用类名调用静态抽象方法没有任何意义

  • 相关阅读:
    中文词频统计
    复合数据类型,英文词频统计
    Mybatis 异常:Cause: java.io.IOException: Could not find resource com.xxx.xxx.xml
    Ajax:修改了项目的ajax相关代码,点击运行没有效果
    大数据应用期末总评
    分布式并行计算MapReduce
    分布式文件系统HDFS 练习
    安装关系型数据库MySQL和大数据处理框架Hadoop
    爬虫综合大作业
    爬取全部的校园新闻
  • 原文地址:https://www.cnblogs.com/lsp-lsp/p/7343920.html
Copyright © 2020-2023  润新知