分享

java----面向对象编程

 印度阿三17 2021-01-21

目录

<一> 面向对象的特征

1. 封装

封装这个特性就是将类中的属性和方法用一些特定的关键字修饰, 使得外部不需要知道内部实现细节, 直接使用即可. 即隐藏内部实现细节, 只暴露出 必要 的信息给类的调用者.

a> private

被 private 关键字修饰的成员, 只能被本类内部成员访问, 不能被其他类访问.
eg1: 本类中访问自己类中的方法, 编译通过.
在这里插入图片描述
eg2: 外部类访问 private 关键字修饰的方法, 编译错误.
在这里插入图片描述
在这里插入图片描述

b> 默认不写

默认不写的成员, 能被同一个包中的类访问, 包外的类无法访问.
eg: Main 类与 Animal 类不在同一个包中, run1()方法默认不写表示只能在该 Animal 类所在的包java0121中访问, 而 Main 类在包java0121外, 因此 animal.run1(); 编译错误; Test 类与 Animal 类在同一个包中, 因此访问可以 run1() 方法.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

c> protected

被 protected 关键字修饰的成员, 能被其子类和同一个包的其他类访问.
在这里插入图片描述

在这里插入图片描述
Cat 类与 Animal 类不在一个包中, 但是是继承关系, 所以可以访问被 protected 关键字修饰的方法.
在这里插入图片描述
Cat 类与 Animal 类不在一个包中, 也不是继承关系, 所以不可以访问被 protected 关键字修饰的方法, 否则编译错误.
在这里插入图片描述

d> public

被 public 关键字修饰的成员, 能被不同包中的类访问.

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

e> 访问权限顺序

由低到高: private < 默认不写 < protected < public

2. 继承

类与类之间的一种继承关系( 父子关系 ), 子类继承父类.
在继承时, 子类会继承父类的成员变量和成员方法.

a> extends 关键字

extends 关键字前面写子类的类名, 后面填写父类的类名

public class Animal {
    String name = "小动物";
}
public class Dog extends Animal {
}

b> 被 final 关键字修饰

被 final 关键字修饰的类, 不能被任何类继承.
在这里插入图片描述

在这里插入图片描述

3. 多态

a> 向上转型

创建子类的实例使其指向父类
Dog 为子类, Animal 为父类

        Dog dog = new Dog();
        Animal animal = dog;

向上转型后, 不能访问子类所特有的方法.
eg: 下面 animal.special();这行代码编译不通过.
在这里插入图片描述

b> 动态绑定( 方法重写 )

子类将父类的方法重写后, 使用父类引用调用重写的方法时, 访问到的是子类的方法.
父类

public class Animal {
    public void run() {
        System.out.println("Animal is "   "running");
    }
}

子类

public class Dog extends Animal {
    public void run() {
        System.out.println("Dog is "   "running");
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Animal animal = dog;
        animal.run();
    }
}

运行结果
在这里插入图片描述

c> 重载与重写区别

  • 重载是在一个类中有一个以上的同名方法. 要求: 参数个数,类型不同.
  • 重写是针对有继承关系的两个类, 子类重写了父类的方法. 要求: 重写的方法其父类的访问权限不高于子类.
    eg: 父类 Animal 重写的方法 run( ) 的权限为 public
    子类 Dog 重写的方法 run( ) 的权限为 protected
    因此父类中 run( ) 的权限高于子类该方法的权限, 编译报错.
    在这里插入图片描述在这里插入图片描述

b> 向下转型

创建父类的实例使其指向子类
Dog dog1 = (Dog) animal1;
animal1 前必须加 (Dog) 进行强制类型转换, 否则编译错误.

Animal animal1 = new Animal();
        Dog dog1 = (Dog) animal1;

向下转型后, 可以访问子类的任何方法 (包含父类中没有的方法).
在这里插入图片描述

<二> 面向对象中的组合

4. 组合

组合就是其成员变量可以使其他类的实例.

a> 成员变量为其他类的实例

public class Animal {
    protected void run2() {
        System.out.println( "Animal is "   "running");
    }
}
public class Dog extends Animal {
    public void run2() {
        System.out.println("Dog is "   "running");
}
public class Test {
    Animal animal = new Animal();
    Dog dog = new Dog();
    public static void main(String[] args) {
       
    }
}
来源:https://www./content-1-830051.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多