java_Object、抽象類、介面、多型、類與類之間的轉換
阿新 • • 發佈:2018-12-30
package com.tz.obj;
/**
* 父類:人類
*
* @author Administrator
*
*/
public class Person {
String name;
int age;
char gender;
}
package com.tz.obj;
/**
* 子類:學生
*
* 屬性:name,age,gender,
*
* @author Administrator
*
*/
public class Student extends Person{
int idNum;
public Student(){
}
public Student(String name,int age,char gender,int idNum){
this.name = name;
this.age = age;
this.gender = gender;
this.idNum = idNum;
}
@Override
public String toString() {
return "姓名:" +name+"年齡"+age+"性別:"+gender+"學號:"+idNum;
}
//重寫equals方法
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;
}
if(obj instanceof Student){ //instanceof(用來判斷物件): == < >
Student s = (Student)obj;
if (s.name.equals(name)&&s.age==this.age&&s.idNum==this.idNum){//用==比較數值,用equals比較引用資料型別。
return true;
}
}
return false;
}
}
package com.tz.obj;
/**
* java中所以類的超類(基類):
* Object: java.lang --> 系統預設匯入
* toString(): 輸出的是物件的地址
* equals() : 比較的是內容,(重寫了equals方法的作用是設定你想要比較的內容,不重寫的話比較的是記憶體地址)
*
* String已經幫我們重寫了toString方法
*
* @author Administrator
*
*/
public class ObjectTest {
public static void main(String[] args) {
String name1 = "HB";
String name2 = "HB";
//建立物件
Student s1 = new Student("影子", 12, '男', 1111);
Student s2 = new Student("影子", 12, '男', 1111);
System.out.println(s1); //
System.out.println(s2.toString());
System.out.println("===========================");
System.out.println(s1==s2); //==:比較的是記憶體地址
System.out.println(s1.equals(s2)); //
System.out.println(name1.equals(name2));
}
}
package com.tz.abs;
/**
* 抽象類:(本質上是一個類)
* 1、如果一個類中含有抽象方法,那麼這個類就一定是個抽象類
* 2、抽象類可以沒有抽象方法。
* 3、抽象類不可以被例項化。
* 4、抽象類中有構造方法的,該構造方法是給子類建立物件用的
* 5、非抽象可以繼承一個抽象類。但是必須要重寫類中的抽象方法
* 6、final 是不能修飾抽象類和抽象方法的
*
*
*
* 如何定義一個抽象類?
* class關鍵字前加abstract
*
*
* 抽象方法:
* [修飾符] abstract 返回值型別 方法名();
*
* 1、被abstract修飾
* 2、沒有方法體
* 3、以分號結尾
*
*/
public abstract class AbstractTest {
public void m1(){ //普通方法
//方法體
}
public abstract void m2(); //抽象方法.
public static void main(String[] args) {
//AbstractTest ab = new AbstractTest();
}
}
package com.tz.abs;
public interface Interface1 extends Interface2,Interface3,Interface4 {
//常量
public static final String NAME ="LEJIAN";
public abstract void eat();
String m3(); //public abstract 可以省略
}
interface Interface2{
}
interface Interface3{
}
interface Interface4{
}
package com.tz.abs;
/**
* 介面:
* 語法:
* 修飾符 interface 介面名{
*
* }
*
* 介面也是引用資料型別,可以等同看作是一個類
* 1、介面中只能有常量,抽象方法
* 2、介面其實是一個特殊的抽象類,特殊在介面是完全抽象
* 3、介面中沒有構造方法,不能被例項化
* 4、類是單繼承,但是介面與介面之間多繼承
* 5、介面與類之間多實現,一個類可以實現多個介面
* 6、實現的關鍵字:implements
* 7、一個非抽象的類實現一個介面時,必須實現介面中所有的方法
*
*
* @author Administrator
*
*/
public class InterfaceTest implements Interface1{
public static void main(String[] args) {
System.out.println(InterfaceTest.NAME);
}
@Override
public String m3() {
// TODO Auto-generated method stub
return null;
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
}
package com.tz.abs;
/**
* 多型:
* 生活中:同一個事物,由於條件不一樣,產生的結果也不同
* 程式中:同一個引用型別,使用不同的例項而執行不同的操作
*
* 1、父類的引用指向子類的物件
* 2、建立子類物件時,呼叫的方法為子類重寫或繼承的方法
* @author Administrator
*
*/
public class PolyTest {
public static void main(String[] args) {
//建立物件
Animal animal = new Dog(); //父類 new 子類 ---》多型
animal = new Fish();
//animal = new bird();
Master master = new Master();
Dog dog = new Dog();
dog.name="旺財";
//master.feed(dog);
Fish fish = new Fish();
fish.name="小魚兒~";
// master.feed(fish); //實際引數
}
}
package com.tz.abs;
/**
* 主人
* @author Administrator
*
*/
public class Master {
public void feed(Dog dog){
dog.move();
System.out.println("我在喂汪汪汪......");
}
public void feed(Fish fish){ //形式引數
fish.move();
System.out.println("我得餵魚了.....");
}
public void feed(Animal animal){
animal.move();
System.out.println("餵養"+animal.name);
}
}
package com.tz.abs;
/**
* 類與類之間的轉換
* 向上轉型------ 子類--》父類 自動
* 向下轉型------ 父類--》子類 強制
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
Animal dog = new Dog(); //父類的引用指向子類的物件
//父類--》子類
//Dog animl = (Dog) new Animal(); //強制型別轉換
Animal a = new Dog();
if(a instanceof Dog){
Dog d = (Dog)a; //向下轉型存在風險
System.out.println(d);
}else{
System.out.println("不是狗");
}
//System.out.println(animl);
}
}