java从入门到入土图_Java从入门到入土day08
好家伙,這個作者竟然妄圖一天就把面向對象的兩個特征說了。他可真是自不量力啊,作者心中OS:學習真累,趕快寫完去打游戲真香。
正文分割線
一、抽象
1、抽象的定義:抽象,字面意思。很抽象,很多人都不懂的東西就叫抽象。那么放在Java中是什么樣的體現呢?百度百科的答案是:抽象是從眾多的事物中抽取出共同的、本質性的特征,而舍棄其非本質的特征的過程。具體地說,抽象就是人們在實踐的基礎上,對于豐富的感性材料通過去粗取精、去偽存真、由此及彼、由表及里的加工制作,形成概念、判斷、推理等思維形式,以反映事物的本質和規律的方法。
2、Java中抽象的體現:
抽象類:抽象方法必須寫在抽象類中,抽象類中可以有除了抽象方法以外的方法。抽象方法意味著在本類中我自己這個類不實現這個方法,這個方法需要通過子類幫我實現。就像你的老板,他只是給你提供了一個解決問題的思路,但是具體流程怎么落地,還是得看你自己怎么做。
接口:接口的話后面會說,現在說了就不能多水一個文章了。
3、抽象類的關鍵字:
abstract:抽象類定義時,abstract寫在class前面。抽象方法定義時,abstract寫在返回值定義之前。一個方法定義為抽象類之后,他就可以不用寫{},而是應該直接分號結尾來結束這個語句。
二、多態
1、多態的定義:同樣的方法,不同的實現就是Java中的多態。
2、靜態多態
重載:相同的類中,允許寫多個方法名一樣的方法。
3、動態多態
重寫:子類重新實現父類的方法,前提是要和父類中的方法一樣。重寫父類的方法時,不能比父類的方法范圍大,假如父類使用protect修飾,那么子類不能用public。而且返回值也得一樣。前兩個點的原理是子類不能比父類拋出更多的異常,而修改這些東西有可能會造成比父類造成更多的異常。
動態綁定:根據傳入方法的對象不同,來執行不同的方法。在說具體一點:當子類重寫父類的方法時,這時候就存在了兩個相同名字,相同類型的方法。那么在程序加載中的時候,程序應該調用哪個呢?這個時候就會根據你傳入的對象是子類還是父類進行選擇。假如傳入是子類就會執行子類的方法。
類型轉換:符合繼承關系的兩個類,支持子類自動向上轉型為父類,但是父類向下轉型的話還是要強制轉換,使用()。
代碼舉例
package UnAble;
/*** 用于演示抽象和多態的類* @author 84980**/
public class Test {
public static void main(String[] args) {
//通過實現類的實例化來賦值給抽象類,因為抽象類是不能實例化的fatherAb fab=new child();
//調用抽象類自身實現的方法fab.ill();
//調用抽象子類的實現方法fab.hello();
//實例化父類Father f=new Father();
//調用父類中的方法human(f);
//實例化子類ChildBen c=new ChildBen();
//正常調用子類中的方法human(c);
//創建一個父類的對象,但是把子類賦值給它,子類會自動轉換為父類Father cff=new ChildBen();
//雖然cff定義是父類對象,但實際上他是由子類傳入,所以調用下面的測試方法還是會輸出子類的方法,這就是動態綁定human(cff);
//父類對象強制轉換為子類對象,為了避免強制轉型帶來的風險,我們需要使用instanceof來判斷這個對象是否是子類if (cff instanceof ChildBen) {
ChildBen cf = (ChildBen) cff;
human(cf);
}
}
/*** 測試動態多態的方法*/
public static void human(Father f) {
f.walk();
}
}
//因為定義了抽象方法,所以該類就必須設置為抽象類abstract class fatherAb{
//定義一個抽象方法public abstract void hello();
//抽象類中的非抽象方法public void ill() {
System.out.println("我是抽象類中的非抽象方法");
}
}
class child extends fatherAb{
@Override
public void hello() {
// TODO 自動生成的方法存根System.out.println("我是實現父類抽象方法的子類");
}
}
class Father{
public void walk() {
System.out.println("我是爸爸,我會走路");
}
}
class ChildBen extends Father{
public void walk() {
System.out.println("我是兒子,我也會走路");
}
}
總結
以上是生活随笔為你收集整理的java从入门到入土图_Java从入门到入土day08的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无公网IP,使用ZeroTier免费内网
- 下一篇: java 下载限速_Java 文件下载限