面向对象的三大特征
2023-03-18 15:29:45 2 举报
AI智能生成
面向对象的三大特征
作者其他创作
大纲/内容
多态
- 概念:父类引用指向子类,从而形式多态<br>- 二者具有直接或者间接的继承关系时,父类的引用才能指向子类<br>- 父类引用仅可调用父类声明的方法和属性,不可调用子类独有的属性方法<br>
package com.qf;<br><br>public class Pet {<br> //健康值<br> int health;<br><br><br> public void toHealth(){<br> System.out.println("宠物恢复健康");<br> }<br><br><br>}<br>
package com.qf;<br><br>public class Dog extends Pet {<br><br><br> @Override<br> public void toHealth() {<br> System.out.println("狗啃骨头,恢复健康");<br> }<br><br> //独有的方法<br> public void sleep(){<br> System.out.println("狗睡觉");<br> }<br><br>}<br>
package com.qf;<br><br>public class Cat extends Pet {<br> @Override<br> public void toHealth() {<br> System.out.println("猫吃两条鱼,恢复健康");<br> }<br><br><br>}
package com.qf;<br><br>public class Master {<br> //看病的方法<br><br> //给狗看病<br>// public void kanBing(Dog dog){<br>// if (dog.health<80){<br>// dog.toHealth();<br>// dog.health=90;<br>// }<br>// System.out.println("狗看完病之后的健康值为:"+dog.health);<br>// }<br>//<br>// //给猫看病<br>// public void kanBing(Cat cat){<br>// if (cat.health<80){<br>// cat.toHealth();<br>// cat.health=90;<br>// }<br>// System.out.println("猫看完病之后的健康值为:"+cat.health);<br>// }<br><br><br> public void kanBing(Pet pet){ //Pet pet=new Cat();<br> if (pet.health<80){<br> pet.toHealth();<br>// pet.sleep(); 错误的 父类引用仅可调用父类声明的方法和属性,不可调用子类独有的属性方法<br> pet.health=90;<br> }<br> System.out.println("看完病之后的健康值为:"+pet.health);<br> }<br><br>}
package com.qf;<br><br>public class Test {<br> public static void main(String[] args) {<br> //创建主人对象<br> Master master = new Master();<br><br><br> //创建狗对象<br>// Dog dog = new Dog();<br>// dog.health=90;<br>// //创建猫对象<br>// Cat cat = new Cat();<br>// cat.health=60;<br><br><br>// master.kanBingDog(dog);<br>// master.kanBingCat(cat);<br><br>// master.kanBing(dog);<br>// master.kanBing(cat);<br><br><br> //创建猫类对象<br> Pet cat=new Cat(); //多态<br> cat.health=50;<br><br> master.kanBing(cat);<br><br> Pet pet = new Dog();//向上转型<br>// pet.sleep();<br><br> //向下转型<br> Dog dog=(Dog) pet;<br><br> dog.sleep();<br><br> Pet pet1 = new Pet();<br><br><br><br> if (pet1 instanceof Dog){<br> // 向下转型<br> Dog dog1=(Dog)pet1;<br> dog1.sleep();<br> }<br><br> }<br>}
Super关键字
含义:直接父类的对象<br><br>作用:可以调用父类的属性、方法、构造方法<br><br>- 调用父类属性和方法时候:<br> - 1.当子类和父类有重名属性和重名方法的时候 this属性 this方法 指的都是 子类自己的<br> - 2.当子类和父类 没有重名属性和没有重名方法的时候 super属性 super方法 指的都是 父类自己的<br>- 调用父类 构造方法的时候:<br> - 注意:创建子类对象前,必须要创建父类对象<br> - 1.super(); 调用的父类的无参构造。是可以完全省略 (前提是必须保留父类的无参构造)<br> - 2.super调用父类的有参构造的时候,要放在构造方法的第一行,super不可以跟this 一起出现<br>
封装
概念:尽可能的隐藏对象的内部细节,控制对象的修改及访问的权限
问题: 在对象的外部 为对象赋值,可能存在非法录入<br> 就目前的技术而言,并没有办法对属性的赋值进行控制<br>
解决方式:- 提供公共访问方法,以保证数据的正常录入<br>- 命名规范:<br> - 赋值 setXXX () //使用方法的参数进行 赋值<br> - 取值 getXXX () //使用方法的返回值进行取值<br><br> 过滤有效数据<br><br> 在公共的访问方法内部,添加逻辑判断,进而过滤掉非法的数据,以保证数据的安全<br>
案例:public void setAge(int age){<br> if (age<150&&age>0){<br> this.age=age;<br> }else {<br> System.out.println("你输入的年龄非法");<br> }<br><br> }
解决方式 使用javabeen实体类设计去解决<br>- JavaBean 分为两种: 1. 数据承载Bean 2.业务逻辑Bean<br>- 数据承载Bean的要求:<br> - 1.私有化属性<br> - 2.对外提供公共的的Get set 方法<br> - 3.提供有参无参构造<br>
案例:public class User {<br> private String username;<br> private String password;<br> <br> public User(){<br> <br> }<br><br> public User(String username,String password){<br><br> this.username=username;<br> this.password=password;<br> }<br> <br> public void setUsername(String username){<br> this.username=username;<br> }<br> <br> <br> public String getUsername(){<br> <br> return username;<br> }<br> <br> public void setPassword(String word){<br> password=word;<br> }<br><br> public String getPassword(){<br> return password;<br> }<br><br><br>}
四种访问修饰符
public(访问等级更低)
最宽松的访问控制修饰符,被public修饰的字段或者方法在整个工程中可见
protected(访问等级比default低一点)
被protected修饰的字段或者方法,仅在本包可见,或者对其他包的子类中可见,其他包的不同子类之间仍然不可见
defualt(访问等级比provate低一点)
字段或者方法没写访问控制修饰符的情况下,默认就是该访问控制级别,属于default级别的字段或者方法仅在被包内可见
provate(访问等级最高,只能类中被访问)
被private修饰的字段或者方法仅在本类中可见
继承
- 概念:类与类之间的属性和方法的赠与和获得<br>- 继承的作用:减少代码的冗余 提高代码的复用性<br>- 语法:子类 extends 父类<br>
(继承的特点)- 1.子类继承父类。可以继承父类中的属性 方法<br>- 2.子类也可以拥有自己的属性 方法<br>- 3.单继承,即在Java中一个子类只能继承一个父类。但是一个父类可以拥有多个子类<br>- 4.多重继承 一个父类可以继承另一个父类 java中最大的父类 就是Object类 (如果一个类 没有显示写出extends 父类 默认就是继承Object )<br>
注意:- 1.构造方法不可继承<br>- 2.父类中私有属性不可继承<br>- 3.父类中使用默认修饰符修饰的属性 和 方法 在不同包的情况下不能继承4.子类的访问修饰符等级不能高于父类的访问修饰符等级<br>
0 条评论
下一页