前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面向对象基础(封装继承多态)【2】

Java面向对象基础(封装继承多态)【2】

作者头像
徐建国
发布2021-08-03 15:48:33
4210
发布2021-08-03 15:48:33
举报
文章被收录于专栏:个人路线

封装的作用和含义

需要让用户知道的才暴露出来,不需要让用户知道的全部隐藏起来,这就是封装。说的专业一点,封装就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

我们程序设计要追求“高内聚,低耦合”。

高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。

编程中封装的具体优点:

1. 提高代码的安全性。

2. 提高代码的复用性。

3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。

4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

再比如说,如果哪天我们需要将Person类中的age属性修改为String类型的,你会怎么办?你只有一处使用了这个类的话那还比较幸运,但如果你有几十处甚至上百处都用到了,那你岂不是要改到崩溃。而封装恰恰能解决这样的问题。如果使用封装,我们只需要稍微修改下Person类的setAge()方法即可,而无需修改使用了该类的客户代码。

封装的实现—使用访问控制符

Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。

下面详细讲述它们的访问权限问题。其访问权限范围如表所示。

1.private 表示私有,只有自己类能访问

2. default表示没有修饰符修饰,只有同一个包的类能访问

3. protected表示可以被同一个包的类以及其他包中的子类访问

4. public表示可以被该项目的所有包中的所有类访问

下面做进一步说明Java中4种访问权限修饰符的区别:首先我们创建4个类:Person类、Student类、Animal类和Computer类,分别比较本类、本包、子类、其他包的区别。

封装的使用细节

类的属性的处理:

1. 一般使用private访问权限。

2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。

3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。

代码语言:javascript
复制
package javastart02;
/**
 * 测试封装
 * @author 玖点夜谈
 *
 */

public class TestEncaption03 {
  private int age;
  private String name;
  private String sex;
  
  
  
  public void setName(String name) {
    this.name=name;
    
  }
public void setAge(int age) {
  if(age>=1&&age<=130) {
    this.age=age;
  System.out.println("年轻");  
  }else {
    System.out.println("重新输入年龄");
  }
  
}

public String getName(String name) {
  return this.name;
  
}
public int getAge() {
  return this.age;
}
}

多态(polymorphism)

多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游,高淇老师是敲代码,数学教授是做数学题; 同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。

多态的要点:

1. 多态是方法的多态,不是属性的多态(多态与属性无关)。

2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。

3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

代码语言:javascript
复制
package javastart02;
/**
 * 测试多态
 * @author 玖点夜谈
 *
 */
public class TestPolym {
  public static void main(String[] args) {
    Animal  a=new Animal();
    anmialcry(a);
    Dog d=new Dog();
    anmialcry(d);
  }
  
  
  static void anmialcry( Animal a) {
    a.shout();
    
    
  }

}
class Animal {
    public void shout() {
        System.out.println("叫了一声!");
    }
}
class Dog extends Animal {
    public void shout() {
        System.out.println("旺旺旺!");
    }
    public void seeDoor() {
        System.out.println("看门中....");
    }
}
class Cat extends Animal {
    public void shout() {
        System.out.println("喵喵喵喵!");
    }
}

对象的转型(casting)

父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。

向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!

在向下转型过程中,必须将引用变量转成真实的子类类型(运行时类型)否则会出现类型转换异常ClassCastException

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 明天也要加油呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档