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 ...
随机推荐
- Windows命令行(DOS命令)教程-6 (转载)http://arch.pconline.com.cn//pcedu/rookie/basic/10111/15325_5.html
8. type [功能] 在屏幕上显示文本文件内容命令 [格式] type [C:][path]filename.ext [说明] type命令用来在屏幕上快速.简便地显示文本文件的内容,扩展名为TX ...
- AngularJs练习Demo3
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- wcf wpf
转 http://blog.csdn.net/thunder09/article/details/5792157 WPF就是所谓下一代Windows界面层技术,我觉得还有满有前途的.不过Vista发布 ...
- hdu 确定比赛名次
算法:拓扑排序 题意:有一个比赛,现在知道很多队之间的关系:让你去让确定比赛排名: Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,... ...
- C++中的类指针
代码: #include <iostream> #include <string> #include <cstdio> using namespace std; c ...
- 利用JS实现HTML TABLE的分页
有时候table的列数太长,不利于使用者查询,所以利用JS做了一个table的分页,以下为相关代码 一.JS代码 <script type="text/javascript" ...
- 一个好玩的jq+php实现转盘抽奖程序
前台页面: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <met ...
- Angular2 和TypeScript
Angular2 和TypeScript 原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者: ...
- NSScanner-备
注意:在扫描的时候,如果 空格是不需要扫描的,那么将会忽略空格. 如下代码: 1 NSString *string = @"my age is d 23 34.0"; ...
- cf B. Resort
http://codeforces.com/contest/350/problem/B 从旅馆开始倒着找到一个点它的出度>1的位置为止,比较长度大小,找到一个长度最大的即可. #include ...