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();
}
}
java学习——abstract 和 final的更多相关文章
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- JAVA中abstract,interface,final,static语法
转自:http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html 一,抽象类:abstract 1,只要有一个或一个以上抽象方法的 ...
- 《JAVA学习笔记 (final关键字)》
[14-9]面向对象-final关键字 /* 继承的弊端,打破封装性. 不让其他类继承该类,就不会有重写. 怎么能实现呢?通过Java中的一个关键子来实现,final(最终化). [final关键字] ...
- Java关键字abstract与final总结
关键字:abstract 用来修饰抽象类与抽象类中的方法 抽象类需要注意的几点: 抽象类不能被实例化.抽象类可以包含属性:方法:构造方法,但是构造方法不能用来new实例,只能被子类调用 有抽象方法的类 ...
- java学习面向对象之final关键字
之前我们讲过继承的相关知识了,继承就是子类继承父类的属性和方法并且还可以覆盖父类的方法.但是这样有一个缺陷是什么呢,就是当我们一个类当中涉及一些封装的核心的东西或者对整个系统非常关键的方法或者类的时候 ...
- Java学习笔记之——final关键字
最终的,最后的 可以修饰:变量.方法.类 (1) 修饰变量 不可改变,即常量,只能赋值一次,赋值之后不可改变 a. 修饰属性:private final int num; 要求属性要显式赋值 通常在属 ...
- Thinking in java学习笔记之final
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- java修饰符public final static abstract transient
JAVA 修饰符public final static abstract transient 关键字: public final static abstract ... 1.public prot ...
随机推荐
- linux下mysql环境支持中文配置步骤
sql脚本执行前加上: CREATE DATABASE IF NOT EXISTS mydatabase DEFAULT CHARSET utf8 COLLATE UTF8_GENERAL_CI; u ...
- Silverlight visifire Chart图表下载到PPT文件中
一.Silverlight xaml.cs文件 1. //下载图表 private void btnDown_Click(object sender, RoutedEventArgs e ...
- C#重写Equals方法步骤
检查传入的参数是否为null, 如果为null,那么返回false, 否则执行步骤2 调用ReferenceEquals查看是否为统一个对象,如果是,那么返回true, 否则执行步骤3 判断两者是否为 ...
- C# Excel 读取为Datatable
最近项目用到的读取Excel 为DataTable 兼容2003.2007.2010.记录一下,以后会用到 引用 NPOI.dll 和 EPPlus.dll using System; using S ...
- (二)CSS3应用 - 实现圆角
html <link href="test.css" type="text/css" rel="stylesheet" /> & ...
- django post方法不能提交
def login(request): if request.method == 'GET': c = {} c.update(csrf(request)) return render_to_resp ...
- 【JAVA编码专题】总结
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
- 奇怪的JS正则表达式问题
同一个正则表达式,为什么在JS里,用 var reg = new RegExp("..."); 定义,验证就各种失败,用 var reg=/.../; 定义,验证就对了...
- ASP转PHP手记
打算将动易网站管理系统移植到PHP环境中,寻寻觅觅了很多PHP内容管理网站,发现网上有动易转PHPCMS的代码,所以就拿定注意用PHPCMS的在google上找到一转换程序,动手做来还成功了,现将此次 ...
- Oracle字符函数(转换大小写,替换等)
在oracle中,有一些字符函数: upper(字符串):转换为大写lower(字符串):转换为小写initcap(字符串):首字母大写replace(字符串1,字符串2,字符串3):将串1中所有的串 ...