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();
    }
}
原文地址:https://www.cnblogs.com/wuyong0818/p/5122994.html