日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java编程基础10——面向对象_多态抽象类接口

發(fā)布時間:2025/3/20 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java编程基础10——面向对象_多态抽象类接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.多態(tài)的概述及其成員訪問特點代碼體現(xiàn)

  • A:多態(tài)(polymorphic)概述

    • 事物存在的多種形態(tài)
  • B:多態(tài)前提-

    • 1.要有繼承關系
    • 2.要有方法重寫
    • 3.要有父類引用指向子類對象。
  • C:多態(tài)中的成員訪問特點之

    • 成員變量:編譯和運行都看父類。
    • 成員方法:編譯看父類,運行看子類(非靜態(tài))。
    • 靜態(tài)成員方法:編譯和運行都看父類—— (靜態(tài)和類相關,算不上重寫,訪問還是父類)
class JavaObject {public static void main(String [] args) {Father a = new Son(); //父類引用指向子類對象System.out.println(a.num);//成員變量-編譯看父類,運行也看父類。Father f = new Son();f.print(); //成員方法非靜態(tài)運行看子類f.method(); //靜態(tài)和類相似,相當于是Father.methond()。} } class Father {int num = 10;public void print () {System.out.println("父級");}public static void method() {System.out.println("father static method");} } class Son extends Father {int num = 20;public void print () {System.out.println("子級");}public static void method() {System.out.println("son static method");} }

2.李明和老李的故事-多態(tài)向上向下轉型

  • A:案例分析-通過該案例幫助理解多態(tài)的現(xiàn)象
  • B:詳細講解多態(tài)中向上轉型和向下轉型
class JavaObject {public static void main(String [] args) {Boy b = new Man(); //父類引用指向子類對象,人類 System.out.println(b.name); //父類引用指向子類對象就是向上轉型b.eat();Man m = (Man)b; //向下轉型m.work(); //多肽的弊端,不能直接使用子類的//基本數(shù)據(jù)類型自動類型提升和強制類型轉換int i = 10;byte c = 20;//i = c; //自動類型提升c = (byte)i; //強制類型轉換} }class Boy {String name = "liming";public void eat() {System.out.println("吃一小碗飯");} } class Man extends Boy {String name = "laoli";public void eat () {System.out.println("吃一大碗飯");}public void work() {System.out.println("工作");} }

3.多態(tài)的好處和弊端

  • A:多態(tài)的好處

    • a:提高了代碼的維護性(繼承保證)
    • b:提高了代碼的擴展性(由多態(tài)保證)
  • B:案例演示

    • 多態(tài)的好處
    • 可以當作形式參數(shù),可以接收任意子類對象
  • C:多態(tài)的弊端

    • 不能使用子類的特有屬性和行為。
  • D:案例演示
    method(Animal a)
    method(Cat c)
class JavaObject {public static void main(String [] args) {//Cat c1 = new Cat(); //父類引用指向子類對象,人類//c1.Cat();method(new Cat());method(new Dog());//Animal a = new Cat();開發(fā)很少用父類引用指向子類對象,直接創(chuàng)建子類對象使用其特有屬性和行為。}/*public static void method(Cat c) { //主類加靜態(tài)c.eat();}public static void method(Dog d) { d.eat();}*/public static void method(Animal a) {//當作參數(shù)的時候用多態(tài)最好,因為擴展性強//Cat c = (Cat)a;強轉會出現(xiàn)類型轉換異常,ClassCastException//關鍵字 instanseof 判斷前邊的引用是否是后邊的數(shù)據(jù)類型if (a instanceof Cat) {Cat c = (Cat)a;//向下轉型,轉向子類c.eat();c.catchMouse();} else if (a instanceof Dog) {Dog d = (Dog)a;d.eat();d.lookHome();} else {a.eat();}} } class Animal {public void eat() {System.out.println("動物吃飯");} } 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 lookHome() {System.out.println("看家");} }

4.多態(tài)中的題目分析題

  • A:看下面程序是否有問題,如果沒有,說出結果
  • class Fu {public void show() {System.out.println("fu show");} }class Zi extends Fu {public void show() {System.out.println("zi show");}public void method() {System.out.println("zi method");} }class Test1Demo {public static void main(String[] args) {Fu f = new Zi();f.method();f.show();} }
  • B:看下面程序是否有問題,如果沒有,說出結果
  • class A {public void show() {show2();}public void show2() {System.out.println("我");} } class B extends A {public void show2() {System.out.println("愛");} } class C extends B {public void show() {super.show();}public void show2() {System.out.println("你");} } public class Test2DuoTai {public static void main(String[] args) {A a = new B();a.show();B b = new C();b.show();} }

5.抽象類的概述及其特點

  • A:抽象類概述

    • 抽象就是看不懂的
  • B:抽象類特點

    • a:抽象類和抽象方法必須用abstract關鍵字修飾

      • abstract class 類名 {}
      • public abstract void eat();
    • b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類或者是接口
    • c:抽象類不能實例化那么,抽象類如何實例化呢?

      • 按照多態(tài)的方式,由具體的子類實例化。其實這也是多態(tài)的一種,抽象類多態(tài)。
    • d:抽象類的子類

      • 要么是抽象類
      • 要么重寫抽象類中的所有抽象方法
  • C:案例演示

    • 抽象類特點
abstract class JavaObject { //抽象類public static void main(String [] args) {//Animal a = new Animal();//Animal a = new Cat();//a.eat();} } abstract class Animal {public abstract void eat(); } abstract class Cat extends Animal {/*public void eat() {System.out.println("貓吃魚");}*/ }

6.抽象類的成員特點

  • A:抽象類的成員特點

    • a:成員變量:既可以是變量,也可以是常量;abstract不能修飾成員變量。
    • b:構造方法:有。

      • 用于子類訪問父類數(shù)據(jù)的初始化。
    • c:成員方法:既可以是抽象的,也可以是非抽象的。
  • B:案例演示

    • 抽象類的成員特點
  • C:抽象類的成員方法特性:

    • a:抽象方法 強制要求子類做的事情。
    • b:非抽象方法 子類繼承的事情,提高代碼復用性。
abstract class JavaObject { //抽象類public static void main(String [] args) {} } abstract class Demo {int num1 = 10;final int num2 = 20;public Demo() {}public void print() {System.out.println("11111");}public abstract void method(); } class DemoSon extends Demo {public void method() {System.out.println("22222");} }

7.旅行-案例演示抽象類的作用

abstract class JavaObject { //抽象類public static void main(String [] args) {name1 n = new name1();n.traffic();} } /* 旅行travel 交通traffic */ abstract class travel {public abstract void traffic(); } class name1 extends travel {public void traffic() {System.out.println("坐汽車");} } class name2 extends travel {public void traffic() {System.out.println("坐火車");} } class name3 extends travel {public void traffic() {System.out.println("坐飛機");} }

8.抽象類練習貓狗案例

  • A:案例演示

    • 具體事物:貓,狗
    • 共性:姓名,年齡,吃飯
    • 貓的特性:抓老鼠
    • 狗的特性:看家
abstract class JavaObject {public static void main(String [] args) {Cat c = new Cat("加菲貓",8);System.out.println(c.getName() + "..." + c.getAge());c.eat();c.catchMouse();Dog d = new Dog("八公",12);System.out.println(d.getName() + "..." + d.getAge());d.eat();d.lookHome();} } abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public abstract void eat(); } class Cat extends Animal {public Cat() {}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("貓吃魚");}public void catchMouse() {System.out.println("抓老鼠");} } class Dog extends Animal {public Dog() {}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");}public void lookHome() {System.out.println("看家");} }

9.抽象類練習老師學生案例

  • A:案例演示

    • 具體事物:基礎班老師,就業(yè)班老師
    • 共性:姓名,年齡,講課。
    • 具體事物:基礎班學生,就業(yè)班學生
    • 共性:姓名,年齡,學習
abstract class JavaObject { //抽象類public static void main(String [] args) {Teacher1 b1 = new Teacher1("王城",30);System.out.println(b1.getName() + "..." + b1.getAge());b1.teach();System.out.println("----------------------------");Teacher2 b2 = new Teacher2("黎明",32);System.out.println(b2.getName() + "..." + b2.getAge());b2.teach();System.out.println("----------------------------");Student1 s1 = new Student1("馮鞏",18);System.out.println(s1.getName() + "..." + s1.getAge());s1.study();System.out.println("----------------------------");Student2 s2 = new Student2("張宇",20);System.out.println(s2.getName() + "..." + s2.getAge());s2.study();System.out.println("----------------------------");} } class Person {private String name;private int age;public Person() {}public Person(String name,int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;} } abstract class Teacher extends Person {public Teacher() {}public Teacher(String name,int age) {super(name,age);}public abstract void teach(); //講課抽象方法 } class Teacher1 extends Teacher {public Teacher1() {}public Teacher1(String name,int age) {super(name,age);}public void teach() {System.out.println("基礎班老師講課");} } class Teacher2 extends Teacher {public Teacher2() {}public Teacher2(String name,int age) {super(name,age);}public void teach() {System.out.println("就業(yè)班老師講課");} } abstract class Student extends Person {public Student() {}public Student(String name,int age) {super(name,age);}public abstract void study(); //學習抽象方法 } class Student1 extends Student {public Student1() {}public Student1(String name,int age) {super(name,age);}public void study() {System.out.println("基礎班學生學習");} } class Student2 extends Student {public Student2() {}public Student2(String name,int age) {super(name,age);}public void study() {System.out.println("就業(yè)班學生學習");} }

10.抽象類練習員工案例

  • A:案例演示

    • 假如我們在開發(fā)一個系統(tǒng)時需要對程序員類進行設計,程序員包含3個屬性:姓名、工號以及工資。
    • 經(jīng)理,除了含有程序員的屬性外,另為還有一個獎金屬性。
    • 請使用繼承的思想設計出程序員類和經(jīng)理類。要求類中提供必要的方法進行屬性訪問。
class JavaObject {public static void main(String [] args) {Coder c = new Coder("蓋倫","001",12000);c.work();Manager m = new Manager("諾手","007",18000,5000);m.work();} } abstract class Employee {private String name;private String id;private double salary;public Employee() {}public Employee(String name,String id,double salary) {this.name = name;this.id = id;this.salary = salary;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setId(String id) {this.id = id;}public String getId() {return id;}public void setSalary(double salary) {this.salary = salary;}public double getSalary() {return salary;}public abstract void work(); } class Coder extends Employee {public Coder() {}public Coder(String name,String id,double salary) {super(name,id,salary);}public void work() {System.out.println("姓名是" + this.getName() + ",工號是" + this.getId() + ",工資是" + this.getSalary() + ",工作是敲代碼");} } class Manager extends Employee {private int bonus; //獎金public Manager() {}public Manager(String name,String id,double salary,int bonus) {super(name,id,salary);this.bonus = bonus;}public void work() {System.out.println("獎金是" + bonus + ",姓名是" + this.getName() + ",工號是" + this.getId() + ",工資是" + this.getSalary() + ",工作是管理");} }

11.抽象類中的面試題

  • A:面試題1

    • 一個抽象類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什么意義?
    • 可以
    • 這么做目的只有一個,就是不讓其他類創(chuàng)建本類對象,交給子類完成
  • B:abstract不能和哪些關鍵字共存

    • abstract和static

      • 被abstract修飾的方法沒有方法體
      • 被static修飾的可以用類名.調用,但是類名.調用抽象方法是沒有意義的
    • abstract和final

      • 被abstract修飾的方法強制子類重寫
      • 被final修飾的不讓子類重寫,所以他倆是矛盾的
    • abstract和private

      • 被abstract修飾是為了讓子類看到并強制重寫
      • 被private修飾不讓子類訪問,所以他倆是矛盾的
abstract class Demo {public static abstract void print();// 錯誤: 非法的修飾符組合: abstract和staticpublic final abstract void print();//錯誤: 非法的修飾符組合: abstract和finalprivate abstract void print(); //錯誤: 非法的修飾符組合: abstract和private }

12.接口的概述及其特點

  • A:接口概述

    • 從狹義的角度講就是指java中的interface
    • 從廣義的角度講對外提供規(guī)則的都是接口
  • B:接口特點

    • a:接口用關鍵字interface表示

      • interface 接口名 {}
    • b:類實現(xiàn)接口用implements表示

      • class 類名 implements 接口名 {}
    • c:接口不能實例化

      • 那么,接口如何實例化呢?
      • 按照多態(tài)的方式來實例化。
    • d:接口的子類

      • a:可以是抽象類。但是意義不大。
      • b:可以是具體類。要重寫接口中的所有抽象方法。(推薦方案)
  • C:案例演示

    • 接口特點
abstract class JavaObject { //抽象類public static void main(String [] args) {//Inter i = new Inter(); //接口不能被實例化,調用抽象方法沒有意義Inter i = new Demo(); //父類引用指向子類對象i.print(); } } interface Inter {public abstract void print(); //接口中的方法都是抽象的 }class Demo implements Inter{public void print() {System.out.println("print");} }

13.接口的成員特點

  • A:接口成員特點

    • 成員變量;只能是常量,并且是靜態(tài)的并公共的。

      • 默認修飾符:public static final
      • 建議:自己手動給出。
    • 構造方法:接口沒有構造方法。
    • 成員方法:只能是抽象方法。

      • 默認修飾符:public abstract
      • 建議:自己手動給出。
  • B:案例演示

    • 接口成員特點
abstract class JavaObject { //抽象類public static void main(String [] args) {//Inter i = new Inter(); //接口不能被實例化,調用抽象方法沒有意義Demo d = new Demo(); //父類引用指向子類對象d.print(); System.out.println(Inter.num);} } interface Inter {public static final int num = 10;public Inter(){} //接口中沒有構造方法public abstract void print(); //接口中的方法都是抽象的public void print() { //接口中不能定義非抽象方法 }public abstract void print(); } class Demo /*extends Object*/implements Inter{ //一個類不寫繼承任何類,默認繼承Object類。public void print() {//num = 20;System.out.println(num);}public Demo() {super();} }

14.類與類,類與接口,接口與接口的關系

  • A:類與類,類與接口,接口與接口的關系

    • a:類與類:

      • 繼承關系,只能單繼承,可以多層繼承。
    • b:類與接口:

      • 實現(xiàn)關系,可以單實現(xiàn),也可以多實現(xiàn)。
      • 并且還可以在繼承一個類的同時實現(xiàn)多個接口。
    • c:接口與接口:

      • 繼承關系,可以單繼承,也可以多繼承。
  • B:案例演示

    • 類與類,類與接口,接口與接口的關系
interface InterA {public abstract void printA(); } interface InterB {public abstract void printB(); } interface InterC extends InterA,InterB{ } class Demo extends Object implements InterA,InterB {//implements只能寫一次public void printA() {System.out.println("printA");}public void printB() {System.out.println("PrintB");} }

15.抽象類和接口的區(qū)別

  • A:成員區(qū)別

    • 抽象類:

      • 成員變量:可以變量,也可以常量
      • 構造方法:有
      • 成員方法:可以抽象,也可以非抽象
    • 接口:

      • 成員變量:只可以常量
      • 成員方法:只可以抽象
  • B:關系區(qū)別

    • 類與類

      • 繼承,單繼承
    • 類與接口

      • 實現(xiàn),單實現(xiàn),多實現(xiàn)
    • 接口與接口

      • 繼承,單繼承,多繼承
  • C:設計理念區(qū)別

    • 抽象類 被繼承體現(xiàn)的是:”is a”的關系。抽象類中定義的是該繼承體系的共性功能。
    • 接口 被實現(xiàn)體現(xiàn)的是:”like a”的關系。接口中定義的是該繼承體系的擴展功能。

16.貓狗案例加入跳高功能分析及其代碼實現(xiàn)

  • A:案例演示

    • 動物類:姓名,年齡,吃飯,睡覺。
    • 貓和狗
    • 動物培訓接口:跳高
abstract class JavaObject {public static void main(String [] args) {Cat c = new Cat("加菲貓",8);c.eat();c.sleep();JumpCat jc = new JumpCat("跳高貓",12);jc.eat();jc.sleep();jc.jump();} } abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public abstract void eat(); //抽象 吃飯public abstract void sleep(); //抽象 睡覺 } interface Jumping { //跳高的接口public void jump(); }class Cat extends Animal {public Cat() {}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("貓吃魚");}public void sleep() {System.out.println("側著睡");} } class JumpCat extends Cat implements Jumping {public JumpCat() {}public JumpCat(String name,int age) {super(name,age);}public void jump() {System.out.println("貓?zhí)?#34;);} }

總結

以上是生活随笔為你收集整理的Java编程基础10——面向对象_多态抽象类接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 都市豪门艳霸淫美妇 | 免费欧美 | 国产夫妻性爱视频 | 国产美女无遮挡网站 | av夜色| 精品熟妇视频一区二区三区 | 亚洲成人一二三区 | 先锋影音一区二区 | 91欧美视频 | 一卡二卡在线观看 | 三级黄色图片 | 日本在线一本 | 一区二区三区免费视频观看 | 日本黄色网页 | 国产成人97精品免费看片 | 蜜桃av噜噜 | 中日黄色片 | 久久伊人操 | 淫妹妹影院 | 黄色av免费观看 | 樱花电影最新免费观看国语版 | 在线二区| 艳妇臀荡乳欲伦交换h漫 | 无码人妻久久一区二区三区蜜桃 | 国产一区二区精品在线观看 | 亚洲区一区二区三区 | 在线观看国产黄色 | 狠狠人妻久久久久久 | 水蜜桃av无码| 国产黄色成人 | 青草视频免费观看 | 人妻少妇被猛烈进入中文字幕 | 国产精品久久无码 | 一区二区三区四区视频 | 精品国产乱码久久久久夜深人妻 | 第一福利丝瓜av导航 | 人妻丰满熟妇岳av无码区hd | www黄色av| 黄色录像毛片 | 国产又大又粗又硬 | 美女视频91| 国产男女猛烈无遮挡免费观看网站 | 九九热色| 大胸美女啪啪 | 中文字幕一区二区三区人妻不卡 | 夜夜嗨av一区二区三区四区 | 国内精品在线观看视频 | 国产中文字幕在线免费观看 | 最近中文在线观看 | 婷婷亚洲精品 | 天天爱天天射 | 丰满少妇在线观看网站 | 真实偷拍激情啪啪对白 | 国产嫩bbwbbw高潮 | 噜噜噜在线视频 | 中国丰满熟妇xxxx性 | 国产美女极度色诱视频www | 91九色蝌蚪 | 国产成人在线看 | 亚洲成人免费电影 | 99人妻碰碰碰久久久久禁片 | 97超碰免费在线观看 | 国产肥老妇视频 | 欧美少妇性生活 | 不卡的av网站 | 国产成人在线一区 | 中文精品久久 | 91视| 国产亚洲精品久久久久久无几年桃 | 粗口调教gay2022.com| 欧美黑人xxxⅹ高潮交 | 亚洲中文字幕无码爆乳av | av片在线观看免费 | 日本久久久久久久久久 | 日本做爰全过程免费看 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 一区二区免费播放 | 国产大屁股喷水视频在线观看 | 中国一级特黄毛片 | 国产中文字幕二区 | 成人一区二区三区在线 | 爱久久视频 | 性生活毛片| av香蕉网 | 亚洲国产免费看 | 巨乳美女动漫 | 日本一区二区在线免费观看 | 一本一道波多野结衣一区二区 | 激情视频亚洲 | 男女考妣视频 | 麻豆视频网站入口 | 欧美亚洲一区二区在线观看 | 国产精品永久免费视频 | 国产精品一区久久 | ,午夜性刺激免费看视频 | 激情综合五月婷婷 | 免费看女生裸体视频 | 娇小萝被两个黑人用半米长 | 国产99久久久欧美黑人 |