JAVA面向对象的三大特性

发布时间:2026/6/17 21:19:07

JAVA面向对象的三大特性 面向对象的三大特性封装、继承、多态一、封装修饰符private ,代表私有的被private 修饰的内容只能在本类中使用。public ,代表公开的公共的封装的要求(1) 属性私有化属性被 private修饰(2) 为私有属性提供公开的get和set方法a. get 方法获取私有化属性的值public 数据类型 get属性名(){return this.属性名;}注意返回值的数据类型取决于 获取属性的数据类型方法名 get 属性名 首字母大写b. set 方法为私有化属性赋值public void set属性名(数据类型 变量名){this.属性名 变量名;}注意形式参数的数据类型取决于 赋值的属性的数据类型方法名 set 属性名 -》首字母大写使用:(1) 获取私有化的属性值通过 get方法(2) 为私有化的属性赋值通过 set方法二、继承概念【理解应用】水杯 是一种 容器铅笔 是一种 笔狗 是一种 动物A is - a BA 继承 B(1) 继承 体现的类与类之间的 一种 is - a关系A is a BA 继承 BA extends B子类 父类语法 class 子类名 extends 父类名{} 【开发应用】(2) 继承是一种机制通过继承可以让子类使用父类中的属性和方法(3) 开发时不能强制使用 继承(extends)继承机制本身存在一种 is-a关系不能人为、刻意的创造使用。继承的好处提高代码的可复用性、可扩展性。方法的覆盖(override)又称为方法的 重写【重点开发面试】(1) 概念在子类中定义和父类同名的方法。(发生在父子类之间)(2) 覆盖的要求a. 子类的 方法名、形参列表、返回值类型 和 父类 相同b. 子类的访问修饰符 和 父类相同或是 比父类更宽(3) 使用一旦子类覆盖了父类中方法子类覆盖后的方法优先被使用(用子类型的引用调用)。(4) 注意a. 如果 子类的方法名、形参列表和父类相同但是返回值类型不同编译报错。b. 如果 子类的方法名、返回值类型和父类相同但是形式参数列表不同编译通过运行通过。—》重载写出 方法 覆盖 和 方法重载 各自特点。写出 override 和 overload 的 各自特点。(5) 应用场景当子类从父类继承的方法不足以满足自身需求时可以将继承到方法进行覆盖。4. 父类中属性和方法是将每一个子类的共性进行提取决定父类中属性和方法。 【理解】(1)父类中信息是 一般的、抽象的(2) 子类中信息是特殊的、具体的5. Java继承的特点Java中的类之间是单继承关系一个类只能有一个直接的父类 【理解】但是可以有多个间接的父类(多级继承)注意Java中类之间的单继承关系体现Java语言的简单性的特点。6. 子类可以从父类中继承哪些内容构造方法、属性和成员方法来思考。(1) 构造方法不能被子类继承 【理解】a. 构造方法的方法名必须和类名一样子类和父类各有不同类名所以子类继承父类的构造方法不满足构造方法的语法要求所以不能继承b. 子类的属性 和方法要比父类更复杂所以子类的构造方法需要完成更多的赋值内容所以父类的构造方法不满足子类构造需求子类需要定义自身构造方法。(2) 属性和成员方法取决于访问修饰符(访问权限) 【面试开发重点】a. Java中的4个访问修饰符本类 同包(同包子类非子类) 不同包的子类 其他(不同的非子类)private(私有的) okdefault(默认) ok okprotected(受保护的) ok ok okpublic(公开的、公共的) ok ok ok okb. 修饰符可以修饰符的内容I. 4个访问修饰符都可以用于修饰符属性、成员方法、构造方法II. public 和 default 可以用于修饰类c. 访问修饰符修饰属性和成员方法的继承性如下private (私有的) 不能被继承default(默认的) 同包下的子类可以被继承protected(受保护的)可以被子类继承的 (同包下的子类不同下子类)public (公开的) 可以被继承7. 创建对象的过程继承 (先完成父类对象的创建再完成子类对象的创建) 【理解】(1) 分配空间子类所有的父类空间 —》给属性赋默认值(2) 递归的创建父类对象a. 初始化父类的属性父类属性第二次赋值机会b.执行父类的构造方法父类属性第三次赋值的机会(3) 完成子类对象的创建a. 初始化子类的属性子类属性第二次赋值的机会b. 执行子类的构造方法子类属性第三次赋值的机会8. super的应用: super()/super. 【面试开发重点】(1) 第一种应用a. super() /super(实参) 用在子类的构造方法中指示创建子类对象时JVM先去完成父类对象对象创建时调用父类哪一个构造方法b. super(): 调用父类无参数的构造方法super(实参)调用父类有参数的构造方法c. 注意I .super()/super(实参) 必须定义在构造方法中第一行有效语句II. 子类的构造方法方法第一行如果没有 super()/super(实参)/ … 的应用则JVM默认添加super() ;III. this()/this(实参) 和 super()/super(实参) 不能同时定义在一个构造方法中Iv. 如果子类的构造方法的第一行语句为 this()/this(实参)则JVM完成父类创建时不在当前的子类的构造方法第一行语句查找 super()/super(实参) 而是转向 this()/this(实参)指向的构造方法的第一行查找super()/super(实参)。(2) 第二种应用a. super. 用在子类的构造方法或是成员方法中 代表调用当前父类对象属性和成员方法b. super.属性名 调用父类的属性super.成员方法 调用父类的成员方法面试题目写出 this 和 super 的区别。总结 当前JVM默认添加的代码(1) 在一个类的成员方法中访问本类的其他成员方法或是 属性默认 添加 this.(2) 如果一个类中没有定义构造方法则JVM默认添加公开、无参数的构造方法(3) 如果子类的构造方法第一行没有使用 this()/this(实参) 或是 super(实参) 则JVM默认在构造方法第一行添加 super();(4) java.lang 包中类如果被使用则JVM默认添加 import java.lang. 类名; 语句三、多态概念【理解应用】(1) 多态父类型的引用 指向 子类型对象。语法 父类类名 引用名 new 子类类名(实参);引用 对象父类型 子类型主观类型 实际类型(2) 用父类型的引用调用属性或是成员方法只能调用父类中定义的属性和方法。(编译的时候检测)(3) 运行的时候JVM会自动的检测子类是否覆盖了父类中方法如果子类覆盖父类中方法则执行子类覆盖后的方法否则直接执行的是父类中方法。引用之间的转换【开发应用重点】(1) 父类型的引用 赋值 给 子类型的引用 通过强制类型转换大类型 小类型a. 语法 子类类名 引用名 (子类类名)父类型的引用名;b. 案例Animal a new Dog();Dog d (Dog)a;c. 结果将父类型引用 通过强制类型转换 赋值给子类型的引用编译一定通过,运行分为以下两种情况i. 如果 实际存储对象类型 和 要转换的类型一致则编译通过运行也通过。Animal a new Dog();Dog d (Dog)a;ii. 如果 实际存储对象类型和要转换的类型不一致则编译通过运行报错错误如下java.lang.ClassCastException(类型转换异常)例如 Animal a new Cat(); // 实际存储对象类型是 CatDog d (Dog)a; // 要转换的类型 Dog注意引用中实际存储的对象类型不变. 如何避免类型转换异常( java.lang.ClassCastException)i. 利用 instanceof关键字避免 类型转换异常。ii. 语法引用名 instanceof 类名iii. 作用将引用中存储的实际对象类型 和 instanceof后面的类型相比较如果实际对象类型兼容后面的类型结果-true,不兼容-结果为false.Iv. 应用场景父类型的引用利用强制类型转换为子类型时可以利用 instanceof判断。(2) 子类型 的引用 赋值 父类型的引用 可以直接赋值 —》多态小类型 大类型a. 语法 父类类名 引用名 子类型的引用名;b. 案例Dog d new Dog();Animal a d;(3) 不存在继承关系的双方不允许转换强制类型转换也不能通过编译直接报错。Animal a new Dog();Person p (Person)a; // 编译报错多态的实际开发应用【开发应用重点】(1) 多态用在数组上本类型所有的子类型的对象都可以作为数组元素进行存储。(2) 多态用在形式参数上本类型所有子类型的对象都可以作为实际参数进行传递。(3) 多态用在返回值上本类型所有的子类型的对象都可以作为返回值返回。多态体现的好处【理解】(1) 屏蔽不同子类之间差异性进行统一管理(2) 让程序更加灵活和通用

相关新闻