1、繼承概述
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class Tel
{
void show()
{
System.out.println("number");
}
}
class NewTel extends Tel
{
void show()
{
//System.out.println("number");
super.show();
System.out.println("name");
System.out.println("pic");
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class Fu //extends object
{
Fu()
{ //super();
System.out.println("fu run");
}
}
class Zi extends Fu
{
Zi()
{
//super();
System.out.println("zi run");
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">/*
需求:假如我們在開發一個系統時需要對員工進行建模。
員工包含3個屬性:姓名、工號、工資。
經理也是員工,除了含有員工的屬性外,另外還有一個獎金屬性。
請使用繼承的思想設計出員工類和經理類。
要求類中提供必要的方法進行屬性訪問。
*/
/*
分析:
員工類:name id pay
經理類:繼承了員工類,並有自己特有的bonus
*/
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 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")
}
}
class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("pro work")
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">/*
需求:獲取一段程序運行的時間。
原理:獲取程序開始和結束的時間並相減即可。
獲取時間:System.currentTimeMillis();
當代碼完成優化後,就可以解決這類問題。
這種方式就是模板方法設計模式。
*/
abstract class GetTime
{
public final void getTime()
{
long start = System.currentTimeMillis();
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<1000;x++ )
{
System.out.println(x);
}
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">abstract class Student
{
abstract void study();
void sleep()
{
System.out.println("sleep");
}
}
interface Smoking
{
public abstract void smoke();
}
interface Drinking
{
public abstract void dtink();
}
class StudentA extends Student implements Smoking,Drinking
{
void study(){}
public void smoke(){}
public void drink(){}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("喫魚");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("喫骨頭");
}
public void kanjia()
{
System.out.println("看家");
}
}
class Pig extends Animal
{
public void eat()
{
System.out.println("喫飼料");
}
public void gongdi()
{
System.out.println("供地");
}
}
class DuoTaiDemo
{
public static void main(S)
{
function(new Cat());
function(new Dog());
function(new Pig());
}
// Animal a = new Cat();Animal a = new Dog();Animal a = new Pig();
public static void function(Animal a)//父類引用指向子類對象
{
a.eat();
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class DuoTaiDemo1
{
public static void main(S)
{
Animal a = new Cat();//類型提升。向上轉型。
a.eat();
//如果想要調用貓的特有方法時,如何操作?
//強制將父類的引用轉成子類類型。向下轉型。
Cat c = (Cat)a;
c.catchMouse();
}
public static void function(Animal a)//父類引用指向子類對象
{
a.eat();
if (a instanceof Cat)//instanceof 關鍵字用於判斷對象的具體類型。
{
Cat c = (Cat)a;
c.catchMouse();
}
else if (a instanceof Dog)
{
Dog c = (Dog)a;
c.kanjia();
}
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class Fu
{
int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu
{
int num = 8;
void method1()//
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
static void method4()
{
System.out.println("zi method_4");
}
}
class DuoTaiDemo1
{
public static void main(String[] args)
{
Zi z = new Zi();
z.method1();
z.method2();
z.method3();
System.out.println("---------------------------------");
//多態中非靜態成員函數特點:編譯看左邊,運行看右邊
Fu f = new Zi();
f.method1();//zi method_1
f.method2();//fu method_2
//f.method3();//編譯失敗 編譯時對象還沒有產生
System.out.println("---------------------------------");
//多態中成員變量特點:編譯運行都看左邊。
System.out.println(f.num);// 5
System.out.println(z.num);// 8
System.out.println("---------------------------------");
//多態中靜態成員函數特點:編譯運行都看左邊。
f.method4();//fu method_4
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class Demo//extends object
{
private int num;
Demo(int num)
{
this.num = num;
}
public boolean equals(Object obj)//複寫equals方法
{
if (!(obj instanceof Demo))
return false;
Demo d = (Demo)obj;
return this.num == d.num;
}
}
class objectDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo(4);
Demo d2 = new Demo(4);
System.out.println(d1.equals(d2));
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class Demo//extends object
{
private int num;
Demo(int num)
{
this.num = num;
}
public boolean equals(Object obj)
{
if (!(obj instanceof Demo))
return false;
Demo d = (Demo)obj;
return this.num == d.num;
}
}
class objectToString
{
public static void main(String[] args)
{
Demo d = new Demo(4);
Class c = d.getClass();
System.out.println(c.getName());
System.out.println(d.hashCode());
System.out.println(Integer.toHexString(d.hashCode()));
System.out.println(d.toString());
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class Outer
{
private int x = 4;
class Inner//內部類
{
int x = 5;
void function()
{
int x = 6;
System.out.println("inner :"+x);
System.out.println("inner :"+this.x);
System.out.println("inner :"+Outer.this.x);
}
}
void method()
{
Inner in = new Inner();
in.function();
}
}
class InnerclassDemo
{
public static void main(String[] args)
{
Outer out = new Outer();
out.method();
System.out.println("-------------");
//直接訪問內部類中的成員。
Outer.Inner in = new Outer().new Inner();
in.function();
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">class AbsDemo
{
abstract void show();
}
class Outer
{
int x = 3;
/*
class Inner extends AbsDemo
{
void show()
{
System.out.println("show :"+x);
}
}
*/
public void function()
{
//new Inner().show();
new AbsDemo()//匿名內部類
{
void show()
{
System.out.println("show :"+x);
}
}.show();
}
}
class InnerclassDemo1
{
public static void main(String[] args)
{
new Outer().function();
}
}</span></span>