zoukankan      html  css  js  c++  java
  • 第05章(面向对象——中)

      1 /*****************
      2 ***第五章面向对象(中)
      3 *******知识点:
      4 **************1.多态
      5 ******************1.1 概念
      6 ******************1.2 实现方式
      7 **************2.抽象类
      8 ******************2.1 关键字
      9 ******************2.2 概念定义
     10 ******************2.3 使用
     11 **************3.接口
     12 ******************3.1 关键字
     13 ******************3.2 概念定义
     14 ******************3.3 使用
     15 ******************3.4 接口和抽象类的对比
     16 **************4.final修饰符
     17 ******************4.1 特征
     18 ******************4.2 使用
     19 **************5.static修饰符
     20 ******************5.1 特征
     21 ******************5.2 使用
     22 */
     23 public class test5{
     24     public static void main(String[] args){
     25         showDemo("1.多态");
     26         demoMultimodal();//演示多态
     27         
     28         showDemo("2.抽象类");
     29         demoAbstractClass();//演示抽象类
     30         
     31         showDemo("3.接口");
     32         demoInterface();//演示接口
     33         
     34         showDemo("4.final修饰符");
     35         demoFinalKeyWord();//演示final
     36         
     37         showDemo("5.static修饰符");
     38         demoStaticKeyWord();//演示static
     39         
     40     }
     41     
     42     /**1.多态**/
     43     public static void demoMultimodal(){
     44         Person p1 = new Person();//调用无参构造方法
     45         Person p2 = new Person(1,"ciade");//调用有参构造方法
     46         System.out.println("========");
     47         Boy b1 = new Boy();
     48         Boy b2 = new Boy(2,"ciade",25);
     49         System.out.println("========");
     50         p1.show();//父类调用父类方法
     51         System.out.println("========");
     52         b1.show();//子类调用子类方法(重载父类方法)
     53         System.out.println("========");
     54         p1 = b1 ;//父类对象指向子类引用后调用子类方法
     55         b1.show();
     56         
     57         //总结:
     58         //        1.调用基类static(只会首次调用)  
     59         //        2.调用本类static(只会首次调用)   
     60         //        3.调用基类构造器  
     61         //        4.调用本类构造器
     62         //初始化对象时调用顺序为 1->2->3->4
     63         //多态是什么 简单来说就是父类对象指向子类引用调用父类方法等同于子类对象调用子类该方法(该方法需要是重载父类的方法)
     64     }
     65     
     66     /**2.抽象类**/
     67     public static void demoAbstractClass(){
     68         //2.1 关键字
     69         String[] s_AbstractClass =  {"abstract"};
     70         System.out.println("抽象类的关键字有:" + s_AbstractClass[0]);
     71         
     72         //2.2 概念定义
     73         //抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,
     74         //是对一系列看上去不同,但是本质上相同的具体概念的抽象,
     75         //我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象类
     76         //如:我们描述水果时。它就是一个抽象类。它有一些共性。比如质量,体积等。但又有一些不同。
     77         //比如 苹果、橙子等就有不同的颜色。不同的外观等。所以我们可以定义一个水果抽象类。其他类可以继承这个抽象类
     78         
     79         //2.3 使用 注意事项
     80         // 1. 抽象类不能实例对象
     81         // 2. 可以带有抽象方法。继承子类必须重写所有的抽象方法(除非这个子类也是抽象类)
     82         // 3. 可以带有实现方法(注意区分 实现为空和实现不为空,抽象类两种均可)
     83         // 4. 可以带有数据成员
     84         // 5. 至少有一个抽象方法(即不能为空类)
     85         // 6. 抽象方法只能使用public、protected,默认情况是public
     86         // 7. 一个子类只能继承一个抽象类(跟继承类一致)
     87         // 8. 抽象类可以继承抽象类
     88         // 9. 抽象类可以实现接口
     89         
     90         System.out.println("抽象类定义:\r\n" 
     91                             + "public abstract class Fruit{ \r\n"
     92                             + "    ...... \r\n"
     93                             + "}"
     94                             );
     95     }
     96     
     97     /**3.接口**/
     98     public static void demoInterface(){
     99         //3.1 关键字
    100         String[] s_demoInterface = {"interface","implements"};
    101         System.out.println("接口关键字有:" + s_demoInterface[0] + "," + s_demoInterface[1]);
    102         
    103         //3.2 概念定义
    104         //额。这个貌似不知道怎么解释了。暂时理解为一系列方法特征的集合吧。
    105         System.out.println("接口定义方式为:\r\n "
    106                             + "public interface 接口名字 {\r\n"
    107                             + "    .....\r\n"
    108                             + " }"
    109                             );
    110         //3.3 使用
    111         System.out.println("接口实现方式为:\r\n "
    112                             + "public class implements 接口名字 {\r\n"
    113                             + "    .....\r\n"
    114                             + " }"
    115                             );
    116         //注意事项:
    117         //            1. 接口可以有变量和方法
    118         //            2. 变量全部是public static final(有且只能有 外加默认)
    119         //            3. 方法全部是public abstract(有且只能有 外加默认)
    120         //            4. 接口可以实现接口(多个)
    121         //            5. 类可以实现接口(多个)
    122         
    123         //3.4 接口和抽象类的对比
    124         //由上面可以得出对比如下:
    125                             //1.语法上区别————定义不同,内部成员和方法不同,继承数量和实现数量不同
    126                             //2.设计上区别————抽象必须重写所有抽象方法,而接口不需要(可以选择性重写)
    127     }
    128     
    129     /**4.final修饰符**/
    130     public static void demoFinalKeyWord(){
    131         //4.1 特征
    132         //1.final类不能被继承,故不可能有子类
    133         //2.final方法不能被重写(final类中的方法均为final)
    134         //3.final变量只能赋值一次,后面值不能变(即需要在声明时立刻初始化)
    135         //4.final关键字不能用于修饰构造方法
    136         
    137         //4.2 使用
    138         //1.final类   public final class A{}
    139         System.out.println("1.final类   public final class A{}");
    140         //2.final方法  public final void A(){}
    141         System.out.println("2.final方法  public final void A(){}");
    142         //3.final变量  public final in A = 1;(三种作用域  静态变量、成员变量、局部变量)
    143         System.out.println("3.final变量  public final in A = 1;(三种作用域  静态变量、成员变量、局部变量)");
    144     }
    145     
    146     /**5.static修饰符**/
    147     public static void demoStaticKeyWord(){
    148         //5.1 特征
    149         //1. 使用static修饰的方法和变量成为全局方法、全局变量(如果在类开始时定义属于类,不属于任何对象)
    150         //2. 1.中的全局方法和全局变量也称为静态方法、静态变量
    151         //3. 在实例化对象时会先调用static方法再调用非static方法 示例可见下面的Person类和Boy类(且只会调用一次)
    152         //4. 任何实例均可访问静态方法和静态变量
    153         //5. 在对象的方法中可以调用静态方法和静态变量
    154         //6. 在静态方法中可以访问静态变量,但不能直接访问对象方法和变量
    155         //7. 在和final组合成final static时用于定义常量(不可发生的变量)
    156         
    157         //5.2 使用
    158         /*
    159             *用于演示static
    160             */
    161             /*
    162             public class test5_1{
    163 
    164                 public static int i = 0;
    165                 
    166                 static{
    167                     System.out.println("static方法加载...");
    168                     
    169                 }
    170                 public static int  show(){
    171                         return i;
    172                 }
    173                 
    174                 public int i_;
    175                 
    176                 public test5_1(){
    177                     this.i_ = 1;
    178                 }
    179                 public test5_1(int i){
    180                     this.i_ = i;
    181                 }
    182                 public int getI(){
    183                     return this.i_;
    184                 }
    185                 
    186                 public void showI(){
    187                     System.out.println("非static调用static方法.... i:" + show());
    188                 }    
    189                 
    190                 public static void main(String[] args) throws Exception{
    191                    System.out.println("static i:" + i);
    192                    //getI();//会报错。  static方法中不能直接调用非static方法
    193                    test5_1.i ++ ;
    194                    
    195                    System.out.println("static i:" + i);
    196                    
    197                    System.out.println("getI()...i_" + new test5_1(5).getI());//这样子可以调用非static方法
    198                    
    199                    test5_1 t = new test5_1();
    200                    t.i++;
    201                    t.showI();
    202                    
    203                 }
    204                 
    205             }*/
    206     }
    207     
    208     /*
    209     *    抽取打印演示函数  用于打印演示功能提示
    210     */    
    211     public static void showDemo(String demoStr){
    212         System.out.println("演示:" + demoStr);
    213     }
    214     
    215 }
    216 
    217 
    218 /*
    219 *  演示基类 
    220 */
    221 class Person{
    222     private int id;
    223     private String name;
    224     static{
    225         System.out.println("这是Person类的static方法在运行....");
    226     }
    227     public Person(){
    228         this.id = 0;
    229         this.name = "无名氏";
    230         System.out.println("这是Person无参构造器在运行....");
    231     }
    232     
    233     public Person(int id,String name){
    234         this.id = id;
    235         this.name = name;
    236         System.out.println("这是Person(id,name)有参构造器在运行....");
    237     }
    238     
    239     public void show(){
    240         System.out.println("这是父类的show()方法——id:" + id + ",name:" + name);
    241     }
    242      
    243 }
    244 
    245 /*
    246 *  演示子类 
    247 */
    248 class Boy extends Person{
    249     private int age;
    250     static{
    251         System.out.println("这是Boy类的static方法在运行....");
    252     }
    253     public Boy(){
    254         //super();  有无此行均会调用父类默认构造方法
    255         //super(0,""); 有此行调用父类带参数构造方法
    256         this.age = 0;
    257         System.out.println("这是Boy无参构造器在运行....");
    258     }
    259     
    260     public Boy(int id,String name,int age){
    261         super(id,name);  //有此行调用基类带参数构造方法  无此行会自行调用基类默认无参方法
    262         this.age = age;
    263         System.out.println("这是Boy(id,name,age)有参构造器在运行....");
    264     }
    265     
    266     //重写show()方法 用于实现多态
    267     public void show(){
    268         super.show();
    269         System.out.println("这是子类的show()方法——age:" + age);
    270     }
    271     
    272 
    273     
    274 }
  • 相关阅读:
    node介绍和环境安装
    有些运算
    时间与日期
    ISE综合工具XST综合约束相关
    Quartus和ISErom文件格式
    IC设计流程及工具
    PAD PIN
    SQL SERVER 2008 利用发布订阅方式实现数据库同步
    .NET中,写一个函数找出一个整数数组中,第二大的数(整数数组作为函数参数)
    网络嵌入式设备
  • 原文地址:https://www.cnblogs.com/ciade/p/4758477.html
Copyright © 2011-2022 走看看