美文网首页
类的封装继承与多态

类的封装继承与多态

作者: 古拉啦啦 | 来源:发表于2019-08-11 22:47 被阅读0次

    随着昨天的学习我们已经掌握了java中类的继承,下面我们来看看java的三大特性的其他两个,封装和多态!
    目录

    • 封装
    • 1.Java 访问权限修饰符
    • 2.封装问题引例
    • 3.类的封装实例
    • 二:继承
    • 覆写
    • 多态
      *多态的基本概念
      *方法的多态性
    1.Java 访问权限修饰符

    在讲解J面向对象的三大特性之前,有必要介绍一下Java 中访问权限修饰符的知识。在java中有四种访问权限修饰符:公有(public)、私有(private)、保护(protected)、默认(default)


    2.封装问题引例

    在前面我们给出了封装的本质,但读者来说,这个概念可能还是比较抽象。我们眼通过现象看本质,现在本质给出了,如果还不能理解的话,其实是我们没有落实透过现象这个流程。下面我们通过一个实例来说明。
    假设我们把对象的属性暴露出来,外界可以任意接触她,甚至改变它,读者可以线看下面的程序,看看会产生什么问题。

    public class TestCat{
    public static void main(String[] args){
    MyCat aCat = new MyCat();
    aCat,weight = -10f; //设置aCat的属性值
    float temp = aCat.weight;
    System.out.println("The weight of a cat is:" + temp);
        }
    }
    class MyCat{
    public float weight;
    MyCat(){
      }
    }
    

    运行结果为: -10.0

    分析:因为把weight暴露给外部了,所以外部可以通过点访问,并设置值为-10,但是对于weight属性来说是不能为负数的,那么如何来改善这种状况?这是,类的封装就可以取得很好的作用。

    3.类的封装实例程序,
    类的封装实例——难以访问的猫
    public class TestCat{
    public static void main(String[] args){
    MyCat aCat = new MyCat();
    aCat,weight = -10f; //设置aCat的属性值
    float temp = aCat.weight;
    System.out.println("The weight of a cat is:" + temp);
        }
    }
    class MyCat{
     private float weight;
    MyCat(){
      }
    }
    

    运行结果报错!!
    与前面相比。在weight前加了修饰符private(私有),当就是这个关键,却使得下面的代码连编译都无法通过。

    MyCat aCat = new MyCat();
    aCat,weight = -10f; //设置aCat的属性值
    float temp = aCat.weight;
    

    private(私有)因为这个修饰符,所以外部无法访问!

    类私有属性的Setter和getter —— 一只品质可控的猫

    public class TestCat{
    public static void main(String[] args){
    MyCat aCat = new MyCat();
    aCat,weight = -10f; //设置aCat的属性值
    float temp = aCat.weight;
    System.out.println("The weight of a cat is:" + temp);
        }
    }
    class MyCat{
     private float weight;
     public void Setweight(float wt){
      if(wt>o)
      weight = wt;
      }else{
      System.out.println("weight设置失败!(weight应该>0)\n采用默认值");
      weight  = 10.0f;
        }
      public floatGetweight(){
      return weight;
        }
    
    MyCat(){
      }
    }
    

    保存并运行结果为 :
    weight设置失败!(weight应该>0)
    采用默认值
    The weight of a cat is:10.0

    4. 覆写

    有关继承的内容请参考上一节内容!!《 [java]类的三个基本特征之一 ---- 继承》
    一、覆写概念

    既然现在出现了继承的关系,那么就存在了子类和父类的联系,而在子类之中有可能定义和父类完全相同的方法或属性的名称,这个时候就称为覆写了
    二、方法的覆写

    当子类定义了和父类在方法名称、返回值类型、参数类型及个数完全相同的方法的时候,称为方法的覆写。

    没有覆写的操作:

      package com.wz.overridedemo;
        class A {
            public void print() {
              System.out.println("Hello World .");
          }
        }
    
        class B extends A {
        }
    
          public class Test {
          public static void main(String args[]) {
            B b = new B();
            b.print(); // 方法从父类继承而来
          }
      }
    

    运行结果:
    Hello World

    这时实例化的是子类对象,但是在子类中没有print()方法,那么就使用从父类中继承而来的pritn()方法。

    实现覆写:

      class A {
            public void print() {
              System.out.println("Hello World .");
            }
      }
    
      class B extends A {
          public void print() { // 方法名称、参数类型及个数、返回值全相同
              System.out.println("世界,你好!");
          }
      }
    
      public class Test {
          public static void main(String args[]) {
              B b = new B();
              b.print(); // 方法从父类继承而来
          }
      }
    

    运行结果:
    世界,你好!

    多态
    5.多态的基本概念

    多态,从字面上理解,多态就是一种类型表现出多种状态。在Java中,多态分为两类:
    a. 方法多态性,体现在方法分重写和覆写上
    b . 对象多态性,体现在父、子类的转型上

    6.方法的多态性

    动物可以移动,但是对于不同的动物移动方式不同,比如鱼来说,移动方式就是游,鸟是飞,马是走,所以move方法实现了多态,子类通过重写move方法实现了多态。
    代码如下:

    class Animal{
    public void move(){
    System.out.println("移动");
    }
    }

    class Fish extends Animal{
    public void move(){
    System.out.println("鱼游");
    }
    }

    class Bird extends Animal{
    public void move(){
    System.out.println("鸟飞");
    }
    }

    class Horse extends Animal{
    public void move(){
    System.out.println("马走");
    }
    }

    public test{
    public static void main(String[] args){
    Animal animal = new Animal();
    Animal fish = new Fish();
    Animal bird = new Bird();
    Animal house = new House();
    animal.move();
    fish.move();
    bird,move();
    house.move();
          }
    }
    

    运行结果:
    移动
    鱼游
    鸟飞
    马走

    相关文章

      网友评论

          本文标题:类的封装继承与多态

          本文链接:https://www.haomeiwen.com/subject/swzsjctx.html