title: Java 基础语法(9)- 面向对象之类的成员
blog: CSDN https://blog.csdn.net/BenCoper
data: Java 学习路线及视频
1. 面向对象特征 -- 封装
为什么需要封装? 封装的作用和含义?
我要用洗衣机, 只需要按一下开关和洗涤模式就可以了. 有必要了解洗衣机内部的结构吗? 有必要碰电动机吗?
我要开车,...
隐藏对象内部的复杂性, 只对外公开简单的接口. 便于外界调用, 从而提高系统的可扩展性, 可维护性. 通俗的说, 把该隐藏的隐藏起来, 该暴露的暴露出来. 这就是封装性的设计思想.
信息的封装和隐藏
Java 中通过将数据声明为私有的 (private), 再提供公共的(public) 方法:
getXxx()和 setXxx()实现对该属性的操作
- class Animal {
- private int legs; // 将属性 legs 定义为 private, 只能被 Animal 类内部访问
- public void setLegs(int i) {
- if (i != 0 && i != 2 && i != 4) {
- System.out.println("Wrong number of legs!");
- return;
- }
- legs = i;
- }
- public int getLegs() {
- return legs;
- }
- }
- public class Zoo {
- public static void main(String args[]) {
- Animal xb = new Animal();
- xb.setLegs(4); //
- System.out.println(xb.getLegs());
- }
- }
四种访问权限修饰符
Java 权限修饰符 public,protected,(缺省),private 置于类的成员定义前, 用来限定对象对该类成员的访问权限.
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | Yes | |||
(缺省) | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
对于 class 的权限修饰只可以用 public 和 default(缺省).
public 类可以在任意地方被访问
default 类只可以被同一个包内部的类访问
2. 面向对象特征 -- 继承
为什么要有继承?
多个类中存在相同属性和行为时, 将这些内容抽取到单独一个类中, 那么多个类无需再定义这些属性和行为, 只要继承那个类即可.
此处的多个类称为子类(派生类), 单独的这个类称为父类(基类或超类). 可以理解为:"子类 is a 父类"
类继承语法规则:
class Subclass extends SuperClass{ }
作用:
继承的出现减少了代码的冗余, 提高代码的复用性
继承的出现, 更有利于功能的扩展
继承的出现让类与类之间产生了关系, 提供了多态的前提.
规则:
Java 只支持单继承和多层继承, 不允许多重继承
一个子类只能有一个父类
一个父类可以派生出多个子类
单继承与多层继承举例
3. 面向对象特征 - 多态性
多态的作用
父类的引用指向子类的对象
规则
编译时, 看左边; 运行时, 看右边.
向上转型
在 Java 中, 子类的对象可以替代父类的对象使用
- Person p = new Student();
- Object o = new Person(); //Object 类型的变量 o, 指向 Person 类型的对象
- o = new Student(); //Object 类型的变量 o, 指向 Student 类型的对象
子类可看做是特殊的父类, 所以父类类型的引用可以指向子类的对象: 向上转型(upcasting).
动态绑定
编译时 e 为 Person 类型, 而方法的调用是在运行时确定的, 所以调用的是 Student 类的 getInfo()方法
- public class Test {
- public void method(Person e) {
- e.getInfo();
- }
- public static void main(Stirng args[]) {
- Person e = new Person();
- e.getInfo();
- }
instanceof 关键字
作用: 用来判断某个对象是否属于某种数据类型.
注意: 返回类型为布尔类型
- Fu f1=new Zi();
- Fu f2=new Son();
- if(f1 instanceof Zi){
- System.out.println("f1 是 Zi 的类型");
- }
- else{
- System.out.println("f1 是 Son 的类型");
- }
向下转型
一个已经向上转型的子类对象可以使用强制类型转换的格式, 将父类引用类型转为子类引用各类型
子类类型 变量名 =(子类类型) 父类类型的变量;
- public class Main {
- public static void main(String[] args) {
- Person person = new Superman();
- Superman s = (Superman)person; // 向下转型
- s.sleep();
- s.fly();
- s.eat();
- }
- }
4. 结语
2020-3-31: Java 基础语法(8)- 数组中的常见排序算法
2020-3-31: Java 基础语法(9)- 面向对象之类的成员
今日好文推荐
一文带你入门 Java Stream 流, 太强了
学历低, 无法胜任工作, 大佬告诉你应该怎么做
今日资料推荐
我的 Java 自学之路 https://how2j.cn/?p=60346
来源: https://www.cnblogs.com/bencoper/p/12622794.html