类的封装继承与多态

2019-08-11  本文已影响0人  古拉啦啦

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

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();
      }
}

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

上一篇下一篇

猜你喜欢

热点阅读