博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA学习日志(7-3-抽象类)
阅读量:6857 次
发布时间:2019-06-26

本文共 2558 字,大约阅读时间需要 8 分钟。

  hot3.png

final关键字:最终

    1.可以修饰类,变量,函数,变量

    2.被final修饰的类不可以被继承,用于避免被继承,被子类复写

final class Demo{	void show(){			}}class subDemo extends Demo//无法编译:不能从最终类继承

    3.被final修饰的方法不能被复写

final class Demo{	final void show(){			}    void show1(){    }}class subDemo extends Demo//无法编译:无法覆盖final修饰的方法

    4.被final修饰的变量是一个常量,只能赋值一次,即可以修饰成员,又可以修饰局部变量

final class Demo{	final int x=3;    void show(){		final int y=4;        int y=9;	}}class subDemo extends Demo//无法编译:无法为最终变量赋值

        当在描述事物时,一些数据出现的值是固定的,为了增强阅读性,都用final修饰

            (作为常量,所有字母都大写,单词间通过“_”连接)

final double PI=3.14;

        5.内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量


抽象类abstract

    特点:1.抽象方法一定定义在抽象类中

               2.抽象方法和抽象类必须被abstract修饰

               3.抽象类不可以用new创建对象(调用抽象方法没意义)

               4.抽象类中的方法要被使用,必须有子类复写其所有的抽象方法后 建立子类对象用

                    如果没有覆盖完全,则该子类仍是抽象类(无法对抽象类实例化)

/* 	当多个类中出现相同功能,但是功能主体不同	这时可以进行向上抽取,只抽取功能定义,不抽取功能主体 */abstract class Student{	abstract void study();	}class BaseStudent extends Student{	void study(){		System.out.println("base study");	}}class AdvanceStudent extends Student{	void study(){		System.out.println("advanced study");	}}class AbstractDemo{	public static void main(String[] args){		new BaseStudent().study();	}}

抽象类和一般类没有太大不同

    该怎么描述事物就怎么描述事物,只是该事物中出现了一些抽象的东西

    这些不确定的部分也是事物的功能,需要明确,但无法定义主体

    因此通过抽象(abstract)来表示

        抽象类比一般类多了抽象方法

        抽象类不可以实例化

**抽象类中可以不定义抽象方法,只为不让该类建立对象


抽象类练习:

/*  	对员工进行建模,员工包含3个属性:姓名,工号,以及工资	经理也是员工,比员工多出一个奖金属性	利用继承思想设计员工类和经理类,并在勒种提供必要的方法进行属性访问*/abstract class Employee{	private String name;	private String id;	private double pay;	Employee(String name,String id,double pay){		this.name=name;		this.id=id;		this.pay=pay;	}	public abstract void work();}class Professional extends Employee{	Professional(String name,String id,double pay){		super(name,id,pay);	}	public void work(){		System.out.println("Professional 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(){		System.out.println("Manager Work");	}}

模板方法模式

  在定义功能时,功能的一部分是确定的,有一部分是不确定的

    而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去

    由该类的子类去完成

/* 	需求:获取一段程序运行的时间	原理:获取程序开始和结束的时间并相见	获取时间:System.currentTimeMillis();		当代码完成优化后,就可以解决这类问题*/abstract class getTime{	public final void GetTime(){		runcode();		long start=System.currentTimeMillis();		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<8000;x++){			System.out.print("x");		}	}}class TemplateDemo{	public static void main(String[] args){		getTime gt=new getTime();		gt.GetTime();	}}

 

转载于:https://my.oschina.net/Almon/blog/715874

你可能感兴趣的文章
我的友情链接
查看>>
对/dev/shm认识
查看>>
结合领域驱动设计的SOA分布式软件架构
查看>>
Cocos Studio 2.3.2开发中的Label控件锚点问题等
查看>>
一、WPF 2个datagrid之间同步进度条
查看>>
活动目录系列之三:多域环境的实现(单站点)
查看>>
squid 的配置详解 (转)--SeriesIII
查看>>
Lucene索引+搜索过程
查看>>
应用交付网络市场机遇与挑战并存 F5跟随趋势开发新平台
查看>>
我的友情链接
查看>>
桌面图标有蓝底怎么去掉方法
查看>>
JavaScript学习
查看>>
linux显示日期 昨天 今天 明天
查看>>
Ubuntu13.04中Firefox中安装flash player插件
查看>>
poj——2239 Selecting Courses
查看>>
我的友情链接
查看>>
自动化代码发布系统实现
查看>>
BAT 批处理脚本教程(如果可以用电脑让事情变的更简单,何不让它变得更简单呢!)...
查看>>
LInux系统基础
查看>>
zabbix监控Linux主机配置
查看>>