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