/ *
- 抽象クラスと抽象メソッド、抽象キーワード
- 抽象クラスおよびメソッド修飾変数tではない、変更されてもよい、ブロック、ビルダー、
- プライベートメソッドは抽象的、静的メソッド、最終的な方法、最終的なクラスで変更することはできません。
- 1、クラスを変更するための抽象的なキーワードで、クラスは抽象クラスと呼ばれています。
- 1.1抽象クラスをインスタンス化することはできません
- 1.2クラスのコンストラクタは、サブクラスをインスタンス化するときに呼び出すことが簡単でなければなりません。
- サブクラスのオブジェクトがインスタンス化されるので、1.3のアプリケーションは、抽象クラスのサブクラスを提供します。
- 抽象メソッドと呼ばれる修飾された抽象メソッドを持つ2、。
- 2.1のみ抽象メソッド宣言、何らその方法は、何ら{}は存在しません、
- 2.2は、それが抽象メソッドを取り出すことができ、抽象メソッドは抽象クラスでなければならない、またはクラスはインスタンスになりますが含まれています。抽象クラスの抽象メソッドは必ずしもありません。
- サブクラスは抽象親クラスであり、その方法2.3抽象クラスをオーバーライドする必要があります。
- なしすべての抽象メソッドをオーバーライドする場合は、まだ抽象クラス
- 3は、あなたがクラスへの匿名の電話を使用することができます抽象クラスは、場合により一度だけ呼び出すことができます
- 新しい抽象クラス名(){}メソッド名();匿名方法抽象クラス、オーバーライド内部ライト{}の抽象メソッドを作成します。
- 図4に示すように、テンプレートメソッドデザインパターン
- 4.1抽象クラスは、汎用テンプレートのサブクラスとして、テンプレートパターンのデザインの種類、抽象クラスを具現します
- サブクラスは抽象クラス、サブクラスの変換に基づいて拡張されますが、抽象クラスの全体的な動作を維持します
- 実装の一部として4.2は、実装の一部の内部機能が不明であるかを決定することです。サブクラスが達成するように、あなたは、部分的に露出された不確実性に行くことができます。
- 4.3言い換えれば、ソフトウェア開発に実装されたアルゴリズムは、全体の工程は、一般的に固定され、これらのステップは、親クラスで書かれています。しかし、揮発性、揮発性の部分の一部は、実装するためのさまざまなサブクラスのために抽象化することができます。これは、テンプレートモードの一種です。
- 4.4テンプレートメソッドデザインパターンは、多くの場合、プログラミングモードを取得するために使用されます。各フレームワークのクラスライブラリは、彼を持っています
- そのような共通として影である:
*データベースパッケージにLアクセス
*JUnitのユニットテスト
*JavaWebサーブレットのdoGet / doPostメソッド呼び出しに関する
*休止テンプレートプログラム
*JDBCTemlate春、等のHibernateTemplate
* /
package object_chapter2;
import java.util.Calendar;
import java.util.Scanner;
public class Object_Abstract {
public static void main(String[] args) {
//非匿名类非匿名对象调用方式
Dog d = new Dog();
d.shout();
//非匿名类匿名对象调用方式
new Dog().eat();
//匿名类非匿名对象调用方式
Animal a = new Animal() {
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("bird eat bugs");
}
@Override
void shout() {
// TODO Auto-generated method stub
System.out.println("渣渣!!");
}
};
a.eat();
a.shout();
//匿名类匿名对象的调用
new Animal() {
@Override
void eat() {
// TODO Auto-generated method stub
}
@Override
void shout() {
// TODO Auto-generated method stub
System.out.println("嘶嘶嘶!!!");
}
}.shout();
//测试模板设计模式
Timer t = new FindPrime();
t.spendTime();
//测试练习
//获取当前月份方式1
// Scanner scan = new Scanner(System.in);
// System.out.println("请输入当前月份");
// int month = scan.nextInt();
//获取当前月份方式2
Calendar c = Calendar.getInstance();//Calendar是JDK中 提供的关于日期的抽象类
int month = c.get(c.MONTH) + 1; //月份数值从0到11,转换到正常数值需要加1.
System.out.println("当前月份是:" + month + "月");
Employee[] employeeList = new Employee[4];
employeeList[0] = new HourlyEmployee(1001, "join", new BirthDate(2000, 10, 1), 50, 256);
employeeList[1] = new SalariedEmployee(1002, "jake", new BirthDate(1995, 1, 11), 14000);
employeeList[2] = new HourlyEmployee(1003, "pork", new BirthDate(2002, 2, 1), 55, 244);
employeeList[3] = new SalariedEmployee(1004, "tony", new BirthDate(1990, 2, 11), 19000);
for (int i = 0; i < employeeList.length; i++) {
System.out.println(employeeList[i].toString());
if(month == employeeList[i].getBirthday().getMonth()){
System.out.println("生日福利加1000元");
System.out.println("当月工资是: " + (employeeList[i].earning() + 1000));
}else {
System.out.println("当月工资是: " + employeeList[i].earning());
}
}
}
}
abstract class Animal{
private String name;
private int age;
abstract void eat();
abstract void shout();
}
class Dog extends Animal{
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("dog eat bones");
}
@Override
void shout() {
// TODO Auto-generated method stub
System.out.println("汪汪汪!!!");
}
}
class Cat extends Animal{
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("cat eat fish");
}
@Override
void shout() {
// TODO Auto-generated method stub
System.out.println("喵喵喵!!!");
}
}
abstract class Timer{
void spendTime() {
long start = System.currentTimeMillis();
code();
long end = System.currentTimeMillis();
System.out.println("Programe spend time:" + (end - start));
}
abstract void code();
}
class FindPrime extends Timer{
@Override
void code() {
for (int i = 2; i <= 1000; i++) {
boolean mark = true;
for (int j = 2; j < Math.sqrt(i); j++) {
if(i % j == 0) {
mark = false;
break;
}
}
if(mark) {
System.out.println(i);
}
}
}
}
abstract class Employee{
private int ID;
private String name;
private BirthDate birthday;
abstract double earning();
public Employee() {
super();
}
public Employee(int iD, String name, BirthDate birthday) {
super();
ID = iD;
this.name = name;
this.birthday = birthday;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BirthDate getBirthday() {
return birthday;
}
public void setBirthday(BirthDate birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Employee [ID=" + ID + ", name=" + name + ", birthday=" + this.birthday.toDateString() + "]";
}
}
class BirthDate{
private int day;
private int month;
private int year;
public BirthDate() {
super();
}
public BirthDate(int year, int month, int day) {
super();
this.day = day;
this.month = month;
this.year = year;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
String toDateString() {
return year + "年" + month + "月" + day + "日";
}
}
class SalariedEmployee extends Employee{
private double monthlySalary;
public SalariedEmployee() {
super();
}
public SalariedEmployee(int iD, String name, BirthDate birthday,double monthlySalary) {
super(iD, name, birthday);
this.monthlySalary = monthlySalary;
}
public double getMonthlySalary() {
return monthlySalary;
}
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
@Override
double earning() {
// TODO Auto-generated method stub
return monthlySalary;
}
@Override
public String toString() {
return "SalariedEmployee [ " + super.toString() + ", monthlySalary=" + monthlySalary + "]";
}
}
class HourlyEmployee extends Employee{
private double hourlySalary;
private int hour;
public HourlyEmployee() {
super();
}
public HourlyEmployee(int iD, String name, BirthDate birthday,double hourlySalary,int hour) {
super(iD, name, birthday);
this.hourlySalary = hourlySalary;
this.hour = hour;
}
public double getHourlySalary() {
return hourlySalary;
}
public void setHourlySalary(double hourlySalary) {
this.hourlySalary = hourlySalary;
}
@Override
double earning() {
// TODO Auto-generated method stub
return hour * hourlySalary;
}
@Override
public String toString() {
return "HourlyEmployee [ " + super.toString() + ", hourlySalary=" + hourlySalary + ", hour=" + hour + "]";
}
}