zoukankan      html  css  js  c++  java
  • java学习——abstract 和 final

    当多个类中出现相同功能,但是功能主题不同,
    这时可以进行向上抽取。这时只抽取功能定义,而不抽取功能主体。

    抽象:看不懂。
    1, 抽象方法一定定义在抽象类中。
    2, 抽象方法和抽象类都必须被abstract关键字修饰。
    3, 抽象类不可以用new创建对象。因为调用抽象方法没有意义。
    4, 抽象类中的方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。
    如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

    抽象类和一般类没有太大的不同。
    该如何描述事物,就如何描述事物,只不过该事物出现了一些看不懂的东西。
    这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体。
    通过抽象方法来表示。

    抽象类比一般类多了抽象函数,就是在类中可以定义抽象方法。
    抽象类不可以实例化。

    特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

    abstract class Student
    {
        abstract void study();
    
    }
    
    class BaseStudent extends Student
    {
        void study()
        {
            System.out.println("bass study");
        }
    }
    
    class AdvStudent extends Students
    {
        void study()
        {
            System.out.println("adv study");
        }
    }
    
    class AbstractDemo
    {
        public static void main(String[] args) 
        {
            System.out.println("Hello World!");
        }
    }
    /*
    加入我们在开发一个系统时需要员工进行建模,员工包含3个属性:
    姓名、工号以及工资。经理也是员工,除了含有员工属性外,另外还有一个奖金属性。请使用继承的思想设计员工类和经理类。需要类中提供必要的方法
    进行属性访问。
    
    员工类:name, id, pay
    经理类:继承了员工,他有自己特有的bonus
    
    */
    
    class Emloyee
    {
        private String name;
        private String id;
        private double pay;
    
        Emplotee(String name, String id, double pay) 
        {
            this.name = name;
            this.id = id;
            this.pay = pay;
        }
    
        public abstract void work();
    
    }
    
    class Professional extends Employee
    {
        Emplotee(String name, String id, double pay) 
        {
            super(name, id, pay);
        }    
        public void work()
        {
            
        }
    }
    
    class Manager extends Employee
    {
        private int bonus;
        Manager(String name, String id, double pay, int bonus)
        {
            super(name, id, pay);
            this.bonus = bonus;
        }
    
        public void work()
        {
            
        }
    }
    class  
    {
        public static void main(String[] args) 
        {
            System.out.println("Hello World!");
        }
    }

    final:最终。 作为一个修饰符。
    1, 可以修饰类,函数,变量。
    2, 被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。
    3, 被final修饰的方法不可以被复写。
    4, 被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。
    当在描述事物时,一些数据的值是固定的,那么这时为了增强阅读性,都给这些值起一个名字。方便阅读。
    而这个值不需要改变,所以加final修饰。作为常量:常量的书写规范所有字母都大写,如果由多个单词组成。
    单词通过 _ 连接
    5, 内部类定义在类中的局部位置上时,只能访问局部被final修饰的局部变量。

    final class Demo 
    {
        void show() {
        }
    }
    class Students extends Demo
    {
    
    }
    
    class  FinalDemo
    {
        public static void main(String[] args) 
        {
            System.out.println("Hello World!");
        }
    }
    /*
    需求:获取一段程序运行的时间。
    原理: 获取程序开始和结束的时间并相减。
    
    获取时间:System.currentTimeMillis();
    
    当代码完成优化后,就可以解决这类问题。
    
    这种方式,模板方式设计模式。
    
    什么是模板方法呢?
    定义方法时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用
    不确定的部分,那么这时将不确定的部分暴露出去,由该类的子类去完成。
    
    */
    
    abstract class GetTime
    {
        public final  void getTime()
        {
            long start = System.currentTimeMillis();
    
            /*for(int x = 0; x<1000; x++)
            {
                System.out.print(x);
            }
            */
    
            runcode();
            long end = System.currentTimeMillis();
    
            System.out.println("毫秒:"+(end - start));
    
        }
    
        public abstract void runcode();
        
    }
    
    class SubTime extends GetTime
    {
        public void runcode()
        {
            for(int x= 0; x<4000; x++)
            {
                System.out.print(x);
            }
        }
    }
    
    
    class  TemplateDemo
    {
        public static void main(String[] args) 
        {
            SubTime gt = new SubTime();
            gt.getTime();
        }
    }
  • 相关阅读:
    宝塔nginx配置
    宝塔apache配置
    公司代码规范
    发送短信倒计时
    js layui 分页脚本
    常用mysql
    win10子系统ubuntu下安装nodejs,并使用n管理版本
    Cocos Creator 热更新文件MD5计算和需要注意的问题
    android app 闪屏
    关于模板测试几个问题
  • 原文地址:https://www.cnblogs.com/wuyong0818/p/5122994.html
Copyright © 2011-2022 走看看