9日目
抽象クラス
抽象クラス、抽象的。抽象Aクラスへの道があるかどうか、彼なしの特定の例としては、その後、彼は抽象クラスである必要があります
Q1、抽象クラスの動物、およびカテゴリ犬の確立、ベースの魚を確立し、犬と動く魚をプリントアウトします。
package day09;
public abstract class Animal {//只写方法不写方法体
public abstract void test();
public abstract void move();
}
class Dog extends Animal{//继承后会报错,在eclipse里,单击类名Dog,点击Add inimplemented methods就可以自动添加重写方法
@Override
public void test() {
}
@Override
public void move() {//重写move
System.out.println("狗的移动方式是撒欢");
}
}
class Fish extends Animal{
@Override
public void test() {
}
@Override
public void move() {
System.out.println("鱼的移动方式是蹦跶");
}
}
犬と新しい魚や実施形態で使用する主な方法は.move
犬をプリントアウトして魚を移動します。
Dog d = new Dog();
d.move();
Fish f = new Fish();
f.move();
。Q2書き込み、次の3つのプロパティが含まれ、抽象クラスとして宣言Employeeクラス、:。名前、ID、給与を
、彼だけでなく、従業員が必要なコンストラクタや抽象メソッド:.ワーク()マネージャークラスのを提供するだけでなく、ボーナスを持っていますプロパティの(ボーナス)は、継承されたアイデアを使用してください、
デザインCommonEmployee Managerクラスとクラスは、クラスには、必要なプロパティのアクセス方法を提供するために必要。
package day09;
public abstract class Employee {
String name;
int id;
double salary;
public Employee(){
}
public abstract void work();
}
class CommonEmployee extends Employee{
public void setComminEmployeeInfo(String name,int id,double salary) {
super.name = name;
super.id = id;
super.salary = salary;
}
public void getComminEmployeeInfo() {
System.out.println(super.id);
System.out.println(super.name);
System.out.println(super.salary);
}
@Override
public void work() {
System.out.println("这是一个普通员工");
}
}
class Manager extends Employee{
double bonus;
public void setManagerInfo(String name,int id,double salary,double bonus) {
super.name = name;
super.id = id;
super.salary = salary;
this.bonus = bonus;//注意,这里的bonus不要使用super.
}
public void getManagerInfo() {
System.out.println(super.name);
System.out.println(super.id);
System.out.println(super.salary);
System.out.println(this.bonus);
}
@Override
public void work() {
System.out.println("这是一个领导");
}
}
mainメソッドの呼び出しで
CommonEmployee ce = new CommonEmployee();
ce.setComminEmployeeInfo("zhangsan", 113, 6300.15);
ce.getComminEmployeeInfo();
ce.work();
Manager m = new Manager();
m.setManagerInfo("lisi",114, 123.21, 45401.14);
m.getManagerInfo();
m.work();
テンプレートモデル設計
抽象クラスは、テンプレートパターンの設計に反映されている、一般的なテンプレートのサブクラスとして抽象クラスの複数の
内部機能の部分を決定するために実装され、実装の一部は不明である。
この場合には、一部を露出させるために不確実であることができますサブクラスの実装をしてみましょう。
テンプレートの一種である、そのサブクラスを達成するために、抽象スーパークラスを記述し、親クラスは複数のサブクラスのための一般的な方法を提供し、1つ以上のメソッド
package day09;
/**
* 模板设计模式
* @author Administrator
*
*/
public abstract class Template {
public abstract void code();
public final void getTime() {
long start = System.currentTimeMillis();
code();
long end = System.currentTimeMillis();
System.out.println("code方法执行的时间: " + (end - start));
}
}
class TestTemp extends Template{
@Override
public void code() {
for(int i = 0;i < 500; i++) {
}
}
}
mainメソッドでは、新しい新しいTestTempオブジェクトは、検索結果の.getTime()メソッドを使用して
インターフェイス
インターフェイス機能:
定義するために使用するインターフェイス
すべてのメンバ変数は、デフォルトのインタフェースは、最終のpublic staticによって修飾されている
すべてのインターフェイスメソッドはデフォルトのパブリック抽象から変更された
インタフェースがコンストラクタされていない
インターフェイスは、多層継承使用
ランナーインタフェース公開{
INT = ID 1;
ボイド開始();
公共ボイドRUN();
ボイドSTOP();
}
に対応する
パブリックインターフェイスランナー{
パブリックstatic int型のID =最終1;
パブリック抽象ボイド開始();
パブリック抽象ボイドRUN() ;
パブリック抽象ボイドSTOP();
}
右の新しいクラスのインタフェースはインタフェース新しいものではありませんが、パッケージ内
のテスト・インタフェースは、クラス名の後にキーワード道具を使います
package day09;
/**
* 子类可以继承父类,只能继承一个父类
* 类可以实现多个接口,多个接口用,分隔
* @author Administrator
*
*/
public class TestInImpl implements TestIn,TestIn1{
@Override
public void test() {
// TODO Auto-generated method stub
}
@Override
public void test1() {
// TODO Auto-generated method stub
}
}
インターフェースインターフェースを継承することができる
クラスは親クラスから継承される場合、および器具インターフェースを
最初継承し、その後実現します
新会社は、学ぶために進歩が遅いのインターフェイスを学習継続して明日、今日到着しました