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

类的封装继承与多态

作者: 古拉啦啦 | 来源:发表于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();
      }
}

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

相关文章

  • 待理解的概念

    多态 继承 封装:类 抽象:类 重载

  • day15-面向对象和pygame

    多继承多继承:让一个类同时继承多个类注意:实际开发的时候。一般不使用多继承 多态类的特点:封装、继承、多态 封装:...

  • 31-封装、继承、多态

    封装、继承、多态 面向对象编程有三大重要特征:封装、继承和多态。 继承 继承机制实现了代码的复用,多个类公用的代码...

  • C艹之路 1.1f继承与派生,多态与虚函数

    抽象,封装,继承,多态这是面向对象的四个特点抽象,封装指的类的声明继承指的是类的继承封装 封装 派生类 class...

  • iOS 语言三大特性

    封装 、 继承、多态OC学习篇之---类的三大特性(封装,继承,多态) - Android应用安全防护和逆向分析-...

  • 【python面试指北】3.类和面向对象

    面向对象编程 封装、继承、多态 组合与继承 优先使用组合(has a)而非继承(is a) 类变量和实例变量的区别...

  • 面向对象 -- 封装

    面向对象有三大特性:封装、继承、多态封装:体现类的可见性继承:体现类的可扩展性多态:体现类的可变性 私有属性和私有...

  • java基础知识(一)

    1、封装、继承、多态 封装:把对象的属性与行为封装为一个独立整体,并尽可能隐藏对象内部细节 继承:子类继承父类的特...

  • 类的封装继承与多态

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

  • P9 Dart中的类 对象

    封装,继承,多态 类是由属性和方法组成 /////

网友评论

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

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