程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java學習中,面向對象的三大特性:封裝、承繼、多態 以及 super關鍵字和辦法的重寫(java 學習中的小記載)

java學習中,面向對象的三大特性:封裝、承繼、多態 以及 super關鍵字和辦法的重寫(java 學習中的小記載)

編輯:關於JAVA

java學習中,面向對象的三大特性:封裝、承繼、多態 以及 super關鍵字和辦法的重寫(java 學習中的小記載)。本站提示廣大學習愛好者:(java學習中,面向對象的三大特性:封裝、承繼、多態 以及 super關鍵字和辦法的重寫(java 學習中的小記載))文章只能為提供參考,不一定能成為您想要的結果。以下是java學習中,面向對象的三大特性:封裝、承繼、多態 以及 super關鍵字和辦法的重寫(java 學習中的小記載)正文


java學習中,面向對象的三大特性:封裝、承繼、多態 以及 super關鍵字和辦法的重寫(java 學習中的小記載)

作者:王可利(Star·星星)

 

封裝

    權限修飾符:public 公共的,private 公有的

    封裝的步驟:

         1.運用private 修飾需求封裝的成員變量。

         2.提供一個地下的辦法設置或許訪問公有的屬性

             設置 經過set辦法,命名格式:     set屬性名();  屬性的首字母要大寫

             訪問 經過get辦法,命名格式:     get屬性名();  屬性的首字母要大寫

 

1 //姓名設置器辦法
2     public void setName(String name){
3         this.name = name;
4     }
5     //姓名訪問器辦法
6     public String getName(){
7         return name;
8     }

 

    代碼書寫的標准:java開發中普通類成員變量(屬性),都是封裝起來的 。

問題:是不是一切的屬性都需求運用 set 和 get 辦法?

    不一定,依照需求來定。

封裝的作用:1. 框架  2. 工具類

封裝的益處:1. 進步了數據的平安性   2. 操作復雜   3. 隱藏了辦法的完成。

 1 class Student{
 2     private String name;//成員變量被修飾之後只能在本類中停止訪問了,公有的了。
 3     private String sex;//假如需求在內部停止訪問,就需求訪問辦法了 set 和 get 辦法。
 4     private int age;//需求搜集,但是不地下,age 就只需求一個set辦法就可以了
 5     
 6     //兩個參數的結構辦法
 7     public Student (String name,String sex){
 8         this.name=name;
 9         if(sex.equals("男")||sex.equals("女")){
10             this.sex = sex; 
11         }
12     }
13     //普通辦法
14     public void study(){
15         System.out.println(name+"在學習");
16     }
17     //性別設置器辦法
18     public void setSex(String sex){
19         if(sex.equals("男")||sex.equals("女")){
20             this.sex = sex;
21         }else{
22             System.out.println("你的輸出不合法,請重新輸出..");
23         }
24     }
25     //性別訪問器辦法
26     public String getSex(){
27         return sex;
28     }
29     //姓名設置器辦法
30     public void setName(String name){
31         this.name = name;
32     }
33     //姓名訪問器辦法
34     public String getName(){
35         return name;
36     }
37     //age設置器
38     public void setAge(int age){
39         this.age = age;
40     }
41 }
42 public class fengzhuang {
43 
44     public static void main(String[] args) {
45         Student star = new Student("星星","性別");//性別  是不合法的操作
46         star.study();
47         System.out.println(star.getSex());//性別 null
48     }
49 }

 

承繼

特點:承繼父類的屬性和辦法。 特性:辦法的復寫(重寫)  單承繼(多層承繼)不是多承繼,c++才是多承繼一個子類N個父類。

java 中的承繼 和 OC中一樣。

承繼的作用:優化代碼,增加代碼的反復運用

A:B OC中承繼的寫法,java中如何表現承繼關系,用關鍵字 extends 表示承繼。

承繼中留意事項:

1.不要為了承繼而承繼,千萬不要為了節省代碼,任何關系都承繼,這樣就不三不四了。

2.父類的公有成員變量是不可以被承繼的。

3.父類的結構辦法是不能被承繼的。

4.父類的公有辦法不能被承繼。

5.子類調用自己的結構辦法時,會默許調用父類中的無參結構辦法。

6.子類不可以承繼不在一個包中默許權限的成員變量。

 

為什麼會調用父類的結構辦法?
子類在創立對象的時分初始化父類的變量。

 

技巧:畢竟這兩個屬性是從父類下面承繼上去的,初始化交給父類會好一點。。

super(name,sex);//普通由自己指定(定義),假如自己指定了上面的 super()就不可以調用了。

super();//調用的是父類的結構辦法

this();//調用的是自己的結構辦法

 

承繼代碼如下:

 1 package 面向對象的三大特性;
 2 
 3 class Person{
 4     String name;//默許權限 friendly(敵對的) private、public、protected
 5     String sex;
 6     Dog dog;//人和狗樹立了 關聯關系      全體->局部
 7     public void eat(){
 8         System.out.println(name+"在吃飯");
 9     }
10 }
11 
12 //定於學生類承繼父類
13 class Student extends Person{
14     int age;
15     public void study(){
16         System.out.println(name+"在學習");
17     }
18 }
19 
20 public class jicheng {
21 
22     public static void main(String[] args) {
23         Student s = new Student();
24         s.name = "WKL";//name 自己沒有 父類有
25         s.age = 20;//age 自己有的
26         System.out.println(s.name+"往年"+s.age+"歲了..");
27     }
28 }

 

關聯關系(不是承繼):

 1 class person{
 2     String name;
 3     String sex;
 4     Dog dog;//人和狗樹立了 關聯關系      全體->局部
 5     public void eat(){
 6         System.out.println(name+"在吃飯");
 7     }
 8 }
 9 
10 class Dog{
11     String name;
12     public void cry(){
13         System.out.println(name+"在叫");
14     }
15 }
16 
17 
18 public class jicheng {
19 
20     public static void main(String[] args) {
21         person star = new person();
22         star.name = "星星";
23         Dog dog = new Dog();
24         dog .name = "小白";
25         
26         star.dog = dog;//把狗這個對象 給 star的dog對象成員屬性
27         /*dog.cry();*/
28         star.dog.cry();//星星的狗在叫
29         star.dog = null;
30         star.eat();
31     }
32 } 

super關鍵字(指向父類對象的援用空間)

作用:

    1.當子類和父類存在同名的成員變量時,會先在子類外面找默許有一個this(this.name),可以經過super來調用父類的成員變量(super.name)。

    2.super可以用來調用父類的結構辦法。

super運用的留意的中央:

    1.用super調用父類結構辦法,必需是結構辦法中的第一個語句。

    2.super只能呈現在子類的辦法或許結構辦法中。

    3.super 和 this 不可以同時調用結構辦法。(由於this也是在結構辦法的第一個語句)

總結:super 和 this 的區別:

   1.代表的事物不一樣:

        this:代表所屬辦法的調用者對象。

        super:代表父類對象的援用空間。

    2.運用前提不分歧:

        this:在非承繼的條件下也可以運用。

        super:只能在承繼的條件下才干運用。

     3.調用結構辦法:

         this:調用本類的結構辦法。

         super:調用的父類的結構辦法

辦法的復寫(重寫)

作用:父類的辦法滿足不了子類的完成,這個時分就需求經過復寫(重寫)辦法再完成父類的行為。

辦法的復寫運用留意事項:

    1.辦法重寫的時分,必需存在承繼關系。

    2.辦法重寫的時分,辦法名和方式參數 必需跟父類是分歧的。

    3.辦法重寫的時分,子類的權限修飾符必需要大於或許等於父類的權限修飾符。( private < protected < public,friendly < public )

    4.辦法重寫的時分,子類的前往值類型必需小於或許等於父類的前往值類型。(  子類 < 父類 )  數據類型沒有明白的上上級關系

    5.辦法重寫的時分,子類的異常類型要小於或許等於父類的異常類型。

辦法的重載:辦法名是一樣的,只是參數列表的個數,類型,順序不一樣。

 

多態(一個對象同品種型不同表現形狀)

父類的援用類型指向了子類的對象。

多態運用留意事項:

    1.多態狀況下,父類 和 子類存在同名的成員變量,無論是靜態的還是非靜態的變量,默許訪問的是父類中的成員變量。

    2.多態狀況下,父類 和 子類存在同名的非靜態辦法,訪問的是子類的非靜態辦法。

    3.多態狀況下,父類 和子類存在同名的靜態辦法,訪問的是父類的靜態辦法。

    4.多態狀況下,不能訪問子類特有的屬性、辦法。

    5.多態滿足的條件:必需要有承繼關系。

總結:多態狀況下,子類 和 父類假如存在同名的成員,訪問的都是父類,除了同名的非靜態變量訪問的才是子類。

java 編譯器編譯原理招致的。

編譯看右邊,運轉不一定看左邊。

編譯看右邊的意思:java 編譯器在編譯的時分會檢測援用類型中含有指定的成員,假如沒有就會報錯。

 1 package study;
 2 
 3 abstract class Animal{
 4     String name;
 5     static String color = "植物色";
 6     
 7     public abstract void run();
 8     
 9     public void eat(){
10         System.out.println("這個是父類中的辦法");
11     }
12 } 
13 
14 class Dog extends Animal{
15     static String color = "黃色";
16     //重寫父類中的辦法
17     public void run(){
18         System.out.println(name+"用四條腿在跑步");
19     }
20     //重寫父類中的eat辦法
21     public void eat(){
22         System.out.println("這個是子類中的辦法");
23     }
24 }
25 
26 class Fish extends Animal{
27     
28     //重寫父類的辦法
29     public void run(){
30         System.out.println(name+"在無拘無束地游泳");
31     }
32 }
33 
34 public class star {
35     public static void main(String[] args) {
36         
37        Animal a = new Dog();//Animal 指針指向 Dog
38        a.name = "小黃";
39        a.run();
40        
41        a.eat();
42        System.out.println(a.color);
43        
44 //       a = new Fish();//Animal 指針指向 Fish
45 //       a.name = "小黃";
46 //       a.run();   
47     }
48 }

多態運用的場景:

    1.多態可以用於做方式參數,可以讓辦法接納更多的類型。

    2.多態用於前往類型,可以前往更多的數據類型。

問題:

    我前往的是圓的對象,不能用圓的援用變量來接納:前往的圖形 -> 圓的父類

    根本數據類型的轉換:大的數據 -> 小的接納(強迫轉換)

 1 package study;
 2 
 3 //需求1:定義一個辦法可以接納恣意類型 的圖形對象,求面積和周長。
 4 //需求2:定於一個辦法可以前往恣意類型的圖形。
 5 abstract class MyShape{
 6     //定義兩個辦法求面積和周長。
 7     public abstract void getArea();
 8     public abstract void getLength();
 9 }
10 
11 class Circle extends MyShape{
12     int r;
13     final double PI = 3.14;
14     
15     //重寫父類中的辦法
16     public void getArea(){
17         System.out.println("圓的面積");
18     }
19     public void getLength(){
20         System.out.println("圓的周長");
21     }
22 }
23 
24 class Rect extends MyShape{
25     
26     public void getArea(){
27         System.out.println("矩形的面積");
28     }
29     public void getLength(){
30         System.out.println("矩形的周長");
31     }
32 }
33 
34 public class star {
35     public static void main(String[] args) {
36         
37         //需求1:定義一個辦法可以接納恣意類型 的圖形對象,求面積和周長。
38         getAreaAndLength(new Circle());
39         getAreaAndLength(new Rect());
40         
41         //需求2:定於一個辦法可以前往恣意類型的圖
42         MyShape a = getMyShape(0);//圓
43         /*getAreaAndLength(a);//在這裡拿到的是哪個型就計算哪個的面積和周長。*/    
44         
45         Circle c = (Circle)a;//援用數據類型的強迫轉換
46         getAreaAndLength(c);//在這裡拿到的是哪個型就計算哪個的面積和周長。
47     }
48     
49     public static void getAreaAndLength(MyShape ms){//這個參數拿到的是父類的對象,但凡屬於這個父類的都可以運用這個辦法。假如是圓就只能接納圓的
50         ms.getArea();
51         ms.getLength();
52     }
53     
54     public static MyShape getMyShape(int i){
55         if (i == 0) {
56             return new Circle();//圓
57         }else if (i == 1) {
58             return new Rect();//矩形
59         }
60         return null;
61     }
62 }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved