JAVA面向对象
- 面向对象编程(OOP,Object-Oriented Programming)
- 以类的方式组织代码,以对象的形式封装数据
三大特性
- 封装
- 继承
- 多态
类与对象的关系
- 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物
- 对象是抽象概念的具体实例
创建与初始化对象
-
使用new关键字创建对象: 除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
-
构造器: 也称为构造方法,是在进行创建对象的时候必须调用的
- 和类名相同;没有返回值
- 使用new关键字,本质是在调用构造器;初始化对象的值
- 一旦定义了有参构造,无参就必须显示定义
*IDEA快捷键: alt + insert 快速生成
*栈中生成对象引用变量名,堆中生成实例?
封装
- 程序设计要求"高内聚,低耦合"。高内聚就是类的内部数据操作细节自己完成,不允许玩不干涉;低耦合: 仅暴露少量的方法给外部使用
- 封装: 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏
- 提高程序安全性,保护数据;隐藏代码实现细节;统一接口;提升系统可维护性
*private 私有修饰符
继承
-
继承本质是对某一批类的抽象,从而实现对现实世界更好的建模
-
JAVA中类只有单继承,没有多继承
-
关键词: extends 意思是扩展,子类是对父类的扩展
-
继承是类与类的一种关系;此外,类与类之间的关系还有依赖、组合、聚合等
- Object类: JAVA中所有的类都默认直接或间接继承Object类
- super:
- 调用父类的方法或属性(私有的方法或属性无法被继承)
- 子类无参构造默认调用父类的无参构造且先调用
- 方法重写:
- 需要有继承关系,子类重写父类方法;方法名相同,参数列表相同
- 重写与静态方法无关
- 只能使用public关键词
- 修饰符: 范围可以扩大,不能缩小: public>prodected>default>private
- 抛出的异常: 范围可以缩小,不能扩大
*IDEA快捷键: CTRL + H 展示当前类继承结构
*final修饰的类不能被继承
多态
- 即同一方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象的实际类型是确定的,可以指向的引用类型就不确定了
//父类的引用指向子类
Object p1 = new Person();
- 父类可以指向子类,但是不能调用子类独有的方法
- 多态是方法的多态
- 多态存在条件:
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
- instanceof
//匿名代码块;每次新增对象时执行
{
}
//静态代码块;只执行一次
static{
}
//静态代码块执行 先于 匿名代码块 先于 构造方法
//===================================================
//静态导入包,可以直接调用random()方法(random().sout)
import static java.lang.Math.random;
抽象类
-
abstract修饰符;可以用来修饰类和方法
-
不能new抽象类
-
抽象方法只有方法名字,没有方法的实现;抽象方法只能靠子类去实现它
-
抽象方法必须在抽象类中;抽象类中可以写普通方法
接口
-
对比:
- 普通类: 只有具体实现
- 抽象类: 具体实现和规范(抽象方法)都有
- 接口: 只有规范;多继承
-
接口就是规范,定义的是一组规则
-
接口的本质是契约,制定好后大家都遵守
-
interface关键词定义接口;implements关键词实现接口
-
接口中的所有定义的方法都是抽象的 public abstract;所有定义的属性都是常量 public static final
-
实现了接口的类,需要重写接口中的方法
-
接口不能被实例化;接口中没有构造方法
内部类
- 内部类就是在一个类的内部定义另一个类
- 成员内部类
- 静态内部类: static
- 局部内部类: 在方法中
- 匿名内部类
//例;不用将实例保存到变量中
new Apple().eat();
*一个JAVA类中可以有多个class类,但只能有一个public class类
标签:JAVA,继承,子类,接口,面向对象,父类,方法 From: https://www.cnblogs.com/Learn1ng/p/17002822.html