Java继承多态封装

Posted ixinfu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java继承多态封装相关的知识,希望对你有一定的参考价值。

继承extends

  • 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法。

  • 实现继承的格式 继承通过extends实现

    格式:class 子类 extends 父类 { }
    举例:class Dog extends Animal { }

  • 继承带来的好处

    继承可以让类与类之间产生关系
    子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。

  • 继承的好处和弊端(理解)

    继承好处
    提高了代码的复用性(多个类相同的成员可以放到同一个类中)
    提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
    继承弊端
    继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
    继承的应用场景:
    使用继承,需要考虑类与类之间是否存在is…a的关系,不能盲目使用继承
    is…a的关系:谁是谁的一种,例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类

    在子类方法中访问一个变量,采用的是就近原则。
    - 子类局部范围找
    - 子类成员范围找
    - 父类成员范围找
    - 如果都没有就报错(不考虑父亲的父亲…)
    -示例代码:

    class Fu{
    	int num = 10;
    }
    class Zi{
    	int num = 20;
    	public void show(){
    		int num = 30;
    		System.out.println(num);
    	}
    }
    public class Demo1{
    	public static void main(String[] args){
    		Zi z = new Zi();
    		z.show();//输出show方法中的局部变量30
    	}
    }
    

多态

什么是多态

  • 同一个对象,在不同时刻表现出来的不同形态

多态的前提

  • 要有继承或实现关系
  • 要有方法的重写
  • 要有父类引用指向子类对象

成员访问特点

  • 成员变量
    编译看父类(左边),运行看父类(右边)
  • 成员方法
    编译看父类(左边),运行看父类(右边)

多态代码演示:

public class Color {
    public void my(){
        System.out.println("颜色");
    }
}
public class ColorDAO {
    public void use(Color c){
        c.my();
    }
}
public class green extends Color{
    @Override
    public void my() {
        System.out.println("green");
    }
}
public class red extends Color{
    @Override
    public void my() {
        System.out.println("red");
    }
}
public class Test {
    public static void main(String[] args) {
        ColorDAO co = new ColorDAO();

        Color c = new red();
        co.use(c);

        green g = new green();
        co.use(g);
    }
}

封装

封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

  • 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
  • 要访问该类的代码和数据,必须通过严格的接口控制。
  • 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
  • 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  1. 良好的封装能够减少耦合。
  2. 类内部的结构可以自由修改。
  3. 可以对成员变量进行更精确的控制。
  4. 隐藏信息,实现细节。

封装示例代码:

public class EncapTest{
 
   private String name;
   private String idNum;
   private int age;
 
   public int getAge(){
      return age;
   }
 
   public String getName(){
      return name;
   }
 
   public String getIdNum(){
      return idNum;
   }
 
   public void setAge( int newAge){
      age = newAge;
   }
 
   public void setName(String newName){
      name = newName;
   }
 
   public void setIdNum( String newId){
      idNum = newId;
   }
}
public class RunEncap{
   public static void main(String args[]){
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");
 
      System.out.print(
      	"Name : " + encap.getName()+ " Age : "+ encap.getAge()
      );
      //输出结果:Name : James Age : 20                         
    }
}	

以上是关于Java继承多态封装的主要内容,如果未能解决你的问题,请参考以下文章

Java基础知识回顾之三 ----- 封装继承和多态

Java面向对象编程:封装,继承,多态

Java中的继承封装多态的理解

Java 三大特性:封装继承多态

java面向对象的基本形式,封装继承多态

java入门学习—封装,继承,多态,this,super,初始代码块