Java 面向对象编程核心概念

1. 基本概念

  面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构,基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。

2. 面向对象核心思想

核心思想描述
抽象从具体事物中抽取、概括出它们共同的属性和行为的过程。
封装把抽象出来的属性和行为结合为一个独立的整体,并尽可能隐藏内部细节的过程。
继承从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力的过程。
多态同一个行为具有多个不同表现形式或形态的能力。

3. 继承

只要两个类满足 is-a 的关系,就可以使用继承关系实现,继承的特点:

项目描述
子类子类拥有父类所有在子类中可以访问到的成员属性和成员方法。
扩展子类可以重写父类中的方法,也可以定义独有的方法。
限制类只能单继承,只允许有一个父类。

需要区分两个概念:

项目描述
方法重载(Overload)发生在同一个类中,只要求方法名相同、参数列表不同,与访问权限修饰符和方法返回值类型无关。
方法重写(Override)发生在继承关系的子类中,要求返回值类型、方法名、参数列表都相同,且访问权限不低于父类中的方法。

4. 抽象类

抽象类用 public abstract class 类名 定义,抽象类的特点:

项目描述
成员属性可以拥有成员变量和成员常量
成员方法相比于普通类,多了抽象方法
实例化不能实例化对象,只能创建普通子类对象
继承抽象类只能被单继承
子类是抽象类,可以不实现父类中的抽象方法
子类是普通类,必须实现所有的抽象方法
其他由于必须被普通类继承才能使用,所以不能有 final 关键字修饰类

注意一个逻辑关系:抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类或接口。

5. 接口

接口用 public interface 接口名 定义,是 Java 中的一个抽象类型,是抽象方法的集合,特点:

项目描述
成员属性只能定义静态常量(public static final 修饰)
成员方法没有构造方法
JDK8以前只有抽象方法
JDK8新增默认实现和静态方法
JDK9新增普通私有方法
实例化不能实例化对象,只能创建接口实现类对象
继承/实现接口只能使用 extends 继承接口
抽象类和普通类只能用 implements 实现接口
抽象类实现接口,可以不实现抽象方法
普通类实现接口,必须实现抽象方法
接口支持多继承和多实现
其他接口只能被普通类实现后才能使用,所以不能用 final 修饰

6. 多态

  多态指同一行为有不同的表现形式,多态又分为编译时多态和运行时多态。

表现形式描述
编译时多态指方法重载,在编译期,根据调用方法时传递的参数列表,确定调用哪一个重载方法
运行时多态指方法重写,在运行期间确定调用父类方法还是子类方法

平时说的多态指的是运行时多态,它有三个必要条件:

  • 继承
  • 重写
  • 父类引用指向子类对象:Parent p = new Child();

编译时多态实例:

public class A {
    public int sum(int a, int b) {
        return a + b;
    }
    public double sum(double a, double b) {
        return a + b;
    }
}

class Demo {
    public static void main(String[] args) {
        A a = new A();
        int s1 = a.sum(1, 2);        	// 传递整数,调用第一个 sum 函数
        double s2 = a.sum(1.0, 2.0);    // 传递小数,调用第二个 sum 函数
        System.out.println(s1);     	// 3
        System.out.println(s2);     	// 3.0
    }
}

运行时多态实例:

public class A {
    public int sum(int a, int b) {
        return a + b;
    }
}

class B extends A {
	@Override
    public int sum(int a, int b) {  // 重写
        a *= 10;
        b *= 10;
        return a + b;
    }
}

class Demo {
    public static void main(String[] args) {
        A a = new B();				// 父类引用指向子类对象
        int sum = a.sum(1, 2);		// 运行时才确定调用,调用的是子类中重新的放啊
        System.out.println(sum);	// 30
    }
}

7. 本篇涉及的关键字

  1. 访问权限修饰符,可以修饰类、成员变量、成员方法。
关键字描述
public任何地方都能访问
protected当前类、当前包中的类、子类能访问
不声明(default)当前类、当前包中的类能访问,其他包中的子类也不能访问
private只能在当前类中访问
  1. 类相关
关键字描述
this指代调用方法的对象,谁调用,指向谁
super指代父类对象,可以调用父类中非私有的属性和方法
final表示最终
修饰的成员变量不能修改
修饰的类不能被继承
修饰的方法不能被重写但可以重载
extends用于实现继承关系,类继承类只能单继承,接口继承接口可以多继承
implements用于类实现接口,类可以实现多个接口
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值