java a<<1_java----面向对象编程

本文详细介绍了Java面向对象编程的三大特性:封装、继承和多态。封装通过访问控制修饰符(private、default、protected、public)实现信息隐藏;继承允许子类继承父类的属性和方法;多态则包括了向上转型、动态绑定和方法重写等概念,让代码更加灵活和可扩展。
摘要由CSDN通过智能技术生成

目录

面向对象的特征

1. 封装

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

a> private

被 private 关键字修饰的成员, 只能被本类内部成员访问, 不能被其他类访问.

eg1: 本类中访问自己类中的方法, 编译通过.

213625239_1_2021012111575569

eg2: 外部类访问 private 关键字修饰的方法, 编译错误.

213625239_2_20210121115755225.png

213625239_3_20210121115755412.png

b> 默认不写

默认不写的成员, 能被同一个包中的类访问, 包外的类无法访问.

eg: Main 类与 Animal 类不在同一个包中, run1()方法默认不写表示只能在该 Animal 类所在的包java0121中访问, 而 Main 类在包java0121外, 因此 animal.run1(); 编译错误; Test 类与 Animal 类在同一个包中, 因此访问可以 run1() 方法.

213625239_4_20210121115755475.png

213625239_5_20210121115755569.png

213625239_6_20210121115755616

213625239_7_20210121115755694.png

c> protected

被 protected 关键字修饰的成员, 能被其子类和同一个包的其他类访问.

213625239_8_20210121115755850.png

213625239_9_20210121115755881.png

Cat 类与 Animal 类不在一个包中, 但是是继承关系, 所以可以访问被 protected 关键字修饰的方法.

213625239_10_2021012111575637.png

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

213625239_11_20210121115756194.png

d> public

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

213625239_4_20210121115755475.png

213625239_12_20210121115756397.png

213625239_13_20210121115756491.png

e> 访问权限顺序

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

2. 继承

类与类之间的一种继承关系( 父子关系 ), 子类继承父类.

在继承时, 子类会继承父类的成员变量和成员方法.

a> extends 关键字

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

public class Animal {

String name = "小动物";

}

public class Dog extends Animal {

}

b> 被 final 关键字修饰

被 final 关键字修饰的类, 不能被任何类继承.

213625239_14_20210121115756553.png

213625239_15_20210121115756678.png

3. 多态

a> 向上转型

创建子类的实例使其指向父类

Dog 为子类, Animal 为父类

Dog dog = new Dog();

Animal animal = dog;

向上转型后, 不能访问子类所特有的方法.

eg: 下面 animal.special();这行代码编译不通过.

213625239_16_20210121115756850.png

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();

}

}

运行结果

213625239_17_20210121115756991.png

c> 重载与重写区别

重载是在一个类中有一个以上的同名方法. 要求: 参数个数,类型不同.

重写是针对有继承关系的两个类, 子类重写了父类的方法. 要求: 重写的方法其父类的访问权限不高于子类.

eg: 父类 Animal 重写的方法 run( ) 的权限为 public

子类 Dog 重写的方法 run( ) 的权限为 protected

因此父类中 run( ) 的权限高于子类该方法的权限, 编译报错.

213625239_18_2021012111575753.png

213625239_19_20210121115757227.png

b> 向下转型

创建父类的实例使其指向子类

Dog dog1 = (Dog) animal1;

animal1 前必须加 (Dog) 进行强制类型转换, 否则编译错误.

Animal animal1 = new Animal();

Dog dog1 = (Dog) animal1;

向下转型后, 可以访问子类的任何方法 (包含父类中没有的方法).

213625239_20_20210121115757444.png

面向对象中的组合

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.icode9.com/content-1-830051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值