目录
面向对象三大特征
封装
思想:将事物包装起来
优点:
1.方便使用
2.保护内部
3.降低耦合度
封装体现:
变量:封装一个值
数组:封装着一组数据类型相同的值
对象:封装着许多个属性和方法
类:封装着属性,方法,构造函数
java文件:封装着多个类
方法:封装一段代码
包:
包就是文件夹,用来存储Java文件
关键字:package,
命名规则:全小写
com.公司名称缩写或者项目名称.分类名
. 用来表示下级文件
如图用来创建一个新的包
导包:当前java文件中使用别的包下的Java文件需要导包
关键字:import
1.如果当前使用类有当前包下的,也有其它包下的,且类名相同,此时不建议导包
2.导包时*表示所有
语法:
import 包名.类名
书写位置:
类名,包下
如图第一个是导入了test文件下的所有文件,而图二只导入Test文件一个
访问权限修饰符:
作用:限定内容的使用范围
关键字 | 含义 | 具体作用 |
public | 公有的 | 当前项目中可用 |
protected | 受保护的 | 在当前包下或继承关系中可写 |
不写 | 默认的 | 在当前包下使用 |
private | 私有的 | 当前类中使用 |
建议:
1.使用private修饰属性
2.提供public修饰的get与set方法,用于对属性值的修改与获取
继承
子类将拥有父类的所有属性和方法,构造函数除外
语法:
访问权限修饰符 class 子类名 extends 父类名{ }
如图子类Cat类继承了父类Aime
优点:
1.提高代码开发效率
2.方便修改
3.降低耦合度
注意:
1.需要判断两个类是否有继承关系
2.一个类只能拥有一个直接父类,单继承
3.一个类没有写出继承,那么默认继承Object类
4.子类可以拥有自己特有的属性与方法
super
含义:谁调用super所在的方法,super就表示谁的父类
作用:
1.当父类属性名或方法名,与子类的属性名方法名相同时,可用于区分
this.属性名或方法名(实参列表); this.属性名或方法名(实参列表)子类的属性或方法
super.属性名或方法名(实参列表) 父类的属性或方法
2.调用父类的属性或方法(this也可调用)
3.调用父类构造函数
super(实参列表);
如图,子类调用了父类的构造函数
注意:
1.必须在子类构造函数第一行
2.如果子类构造函数没有调用父类构造函数,系统会为其自动添加super()调用父类无参构造
如果父类没有无参构造,那么子类构造函数会报错
当继承关系创建时:子类对象中的堆内存中既有父类的属性和方法,也有子类特有的属性和方法
多态
概念:一个事物拥有多种形态
事的多态
重载
同一个类中,方法名相同,形参列表不同
重写
继承关系中
子类方法与父类方法
子类方法的访问权限修饰符不能小于父类的
返回值类型相同
方法名相同
形参列表相同
方法不同
物的多态:
子类对象可以转换为父类对象(自动转换)
语法:
父类名 对象名 = 子类对象;
注意:
1,子类对象转换为父类对象后,该父类对象不能调用子类特有的属性或方法
2,子类对象转换为父类对象后,该父类对象调用重写的方法,执行的是子类中的方法
3,子类对象转换为父类对象后,该父类对象调用未重写的父类方法,执行的是子类继承父类的方法
父类对象转换为子类对象(强制类型转换)
语法:
子类名 对象名=(子类名) 父类对象;
父类对象转子类对象可能会出现类型转换异常
判断该对象是否属性该类:
语法
boolean 变量名=对象名 instanceof 类名;
true 表示该对象是该类的对象,可以转换
false表示该对象不是该类的对象,不能转换
练习:
宠物医生给宠物治病,
宠物有猫,狗,鱼
宠物医生:小李
宠物:
旺财,黄,公(狗)
富贵,白,公(狗)
布丁,白,雌(猫)
金龙,黄,雌(鱼)
小李给以上宠物治病,病好后,狗作揖,猫叫喵喵喵,鱼跳龙门
医生类:小李
属性:名称
方法:给宠物治病
动物类:
共同属性:姓名,颜色,性别
狗类:
旺财,富贵,
方法: 做揖
猫类:
布丁
方法:喵喵
鱼类:
金龙
方法:跃龙门
先构建动物类:
public class Aime {
private String nameString; //定义属性
private String celor;
private String sex;
public Aime() {//创建无参构造函数
}
public Aime(String nameString,String celor,String sex) {//创建有参构造函数
this.nameString=nameString;
this.celor=celor;
this.sex=sex;
}
/**
*
* 以下皆为构造set,get构造方法
*
*/
public void setName(String nameString) {
this.nameString=nameString;
}
public String getName() {
return nameString;
}
public void setCelor(String celor) {
this.celor=celor;
}
public String getCeor() {
return celor;
}
public void setSex(String sex) {
this.sex=sex;
}
public String getSex() {
return sex;
}
}
再构造猫类方法
public class Cat extends Aime {//继承动物类
public Cat() {
super();//调用父类构造函数
}
public Cat(String name,String celor,String sex) {
super( name,celor,sex);
}
public void call() {
System.out.println(getName()+"喵喵叫");//运用get方法获得猫猫名字
}
}
狗类,鱼类与之类似
之后构造医生类
public class Doucter {
private String name;//构造医生类
public Doucter() {
}
public Doucter(String name) {
this.name=name;
}
public void setName(String name) {
this.name=name;
}
public String getName(String name) {
return name;
}
public void zhiLiao(Aime aime) {//构造治疗方法,子类转换为父类为自动转换
System.out.println(name+"治疗"+aime.getName());//
if(aime instanceof Dog) {//动物类来自那个动物
Dog dog=(Dog)aime;//将此动物类强制转换为具体的动物类
dog.maekd();//调用此类中的方法
}
if(aime instanceof Fish) {
Fish fish=(Fish)aime;
fish.jaep();
}
if(aime instanceof Cat) {
Cat cat=(Cat)aime;
cat.call();
}
}
}
最后环境类运行
public class Zhu {
public static void main(String[] args) {
Doucter xiaoL=new Doucter("小李");//创建对象
Dog wangC=new Dog("旺财","白","公");
Dog fuG=new Dog("富贵","白","公");
Cat buD=new Cat("布丁","白","雌");
Fish kIng=new Fish("金龙","黄","雌");
xiaoL.zhiLiao(wangC);//调用医生类的治疗方法,狗类,鱼类猫类会自动转化为父类动物类
xiaoL.zhiLiao(fuG);
xiaoL.zhiLiao(buD);
xiaoL.zhiLiao(kIng);
}
}
运行成功