【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

时间:2022-10-06 10:26:59
课程回顾:


接口:
1、属性:public\static\final
2、方法:public\abstract


多态:
1、静态化(编译时)多态
重载
2、动态化(运行时)多态
重写
对象转型
1、向上转型
2、向下转型






今日内容:
内部类:定义在类的内部的类
1、成员内部类
格式:[修饰符] class 类名 {


}
内部不能有静态的属性和方法,
可以访问外部类的属性,
也可以调用外部类的方法


在静态方法中的使用格式:
外部类 外对象=new 外部类();
成员内部类 对象名=外对象.new 成员内部类();




2、静态内部类
格式:
[修饰符] static class 类名{


}
内部可以有静态/非静态的属性和方法
可以调用外部类的静态属性和方法
但是不能调用外部类非静态的属性和方法


使用:
外部类名.静态内部类名 对象=new 外部类名.静态内部类();


3、局部内部类
格式:class 类名{}
定义在方法内部的类


调用局部变量时,要求局部变量必须是final修饰的
使用的时候,只能在对应的方法内部






4、匿名内部类
格式:new 类名/接口名(){重写的方法}
匿名内部类创建的是一个子类或实现类
并且生成一个对象
常常用来实例化抽象类或接口
匿名内部类没有类名,编译之后产生的是以数字命名的字节码文件




内部接口:定义在类内部的接口
可以在类的内部定义一个接口
接口可以继承多个接口








练习:请定义一个接口IStudy
拥有方法:study(),study(String msg);
创建一个类Student
属性若干,方法自定义
要求有一个方法:public void showStudy(IStudy ist)
最后创建测试类,并且调用Student的showStudy方法


设计模式之简单工厂模式:
涉及到的角色:
1、所有产品的父类:产品类都共同拥有的属性和方法的类
2、产品类:所涉及到的产品类
3、工厂类:提供静态方法,用于创建对象




思路:这种模式是为了实现解耦,就是说在使用具体对象的时候,
不需要关心对象的创建过程
只需要根据指定的指令,获取对应的对象就可以了
对象的具体创建时通过工厂类的静态方法完成的
因为要涉及到多个产品类的对象返回,所以我们使用父类
所以的子类对象都可以充当父类对象


简单工厂体现的是面向对象的:对象转型(向上和向下)




练习:卖饮料的










面向对象小结:
面向对象是一种思想
面向对象三大特征:封装、继承、多态
万事万物皆对象
面向对象2大核心:
1、类:抽象、模板、概念、定义:所有对象共同拥有的属性和方法的组合
2、对象:具体的、实例


类的格式:
[修饰符] class 类名 [extends 类名][implements 接口名,……]{
[属性]
[修饰符] 数据类型 属性名;
//public/protected/private/final/static
[方法]
[修饰符1,修饰符2] 返回值类型 方法名([形式参数列表]){
代码块;
}
[构造方法]
[修饰符] 类名([形式参数列表]){
代码块;
}
}
对象创建格式:
类名 对象名=[new 类名([实际参数列表])];




public/final/abstract可以修饰类


this用法:本类的
1、代指本类对象
可以用来区分同名的成员变量和局部变量


2、调用本类的其它的构造方法
只能在构造方法中
必须在第一行
格式:this([实际参数列表]);


属性的封装:
1、属性私有
2、公有的get和set方法


标准类javaBean:
1、属性私有
2、公有的get和set方法
3、公有的无参构造方法


static用法:静态的
1、修饰属性:静态属性
2、修饰方法:静态方法
3、修饰构造代码块:静态代码块
4、修饰内部类:静态内部类




访问修饰符:
1、public:公共
2、protected:受保护
3、default/package(只是表示的是没有访问修饰符的状态):默认
4、private:私有


包:
1、package 声明包
2、import  导入包




继承:一个类拥有另一个类的属性和方法
extends
java只允许单继承,但是可以继承的传递性


super用法:子类中
1、调用父类中的属性和方法
2、调用父类的构造方法
只能在子类的构造方法中
只能在第一行
格式:super([实际参数列表]);


重写:子类增强父类中的方法
1、子类中,重写的是父类的方法
2、访问修饰符不能比父类的更严格
3、静态/非静态、返回值类型、方法名、形式参数列表都要相同




Object类:所有类的父类
常用方法:
1、hashCode
2、toString
3、equals
4、getClass




final用法:最终的
1、修饰变量:常量,只能赋值一次
2、修饰方法:不能被重写
3、修饰类:不能被继承




abstract用法:抽象的
1、修饰方法:抽象方法
格式:[修饰符] abstract 返回类型 方法名([形式参数列表]);
抽象方法只有方法的声明,没有方法的实现(没有方法体)
2、修饰类:抽象类
抽象类不能实例化
抽象类不一定有抽象方法
有抽象方法的类一定是抽象类






接口:由常量和抽象方法组成的结构体
属性:默认拥有public、static、final
方法:默认拥有public、abstract


多态:多种形态
1、静态化(编译时)多态
重载
2、动态化(运行时)多态
重写
对象转型
1、向上转型:子类到父类,自动
2、向下转型:父类到子类,强制
一般都会结合instanceof使用

instanceof:用法
验证对象是否属于某种类型
格式:对象名 instanceof 类名



内部类:定义在类内部的类
1、成员内部类
内部不能使用静态的
成员内部类名 对象=外部类对象名.new 类名();


2、匿名内部类
格式:new 类名/接口名(){重写的方法}
只能使用一次,没有类名,产生是一个对象


3、静态内部类
内部不能使用外部类的非静态属性和方法


4、局部内部类
定义在方法内部的,也只能在方法中使用
操作局部变量时,要求局部变量是final修饰的






设计模式:
1、单例模式:保证类的唯一实例
规则:
1、私有构造方法
2、私有静态本类对象
3、公有静态方法(返回本类对象)


2、简单工厂模式:实现解耦
规则:
1、产品类
2、产品类的父类
3、工厂类(静态方法)
体现:对象转型


JAVA的原则:
1、最小作用域最强原则(就近原则)
2、最佳匹配性原则(重载)




















下周内容:
数组
异常
常用类
集合