javaSEday07知识总结

面向对象的三大特征之三:多态

多态是在 继承/实现情况下的一种现象,表现为:对象2多态、行为多态。

多态的前提

有继承/ 实现 关系; 存在父类引用子类对象 存在方法重写

多态的一个注意事项

多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。

使用多态的好处:

在多态形式下,右边对象是解耦的,更利于扩展和维护

定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强,更便利。

注意事项:多态下不能使用子类的独有功能。

类型转换:

l 自动类型转换:父类 变量名 = new 子类 ();
l 强制类型转换: 子类 变量名 = ( 子类 ) 父类变量

强制类型转换的一个注意事项

存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。

运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来。

People p = new Teacher();

Student s = (Student) p;

强制转换的时候建议使用instanceof关键字,判断当前对象的真实类型,在进行强制转换。

p instanceof Student‘

类型转换有几种形式?能解决什么问题?

l 自动类型转换、强制类型转换。
l 可以把对象转换成其真正的类型,从而解决了多态下不能调用子类独有方法的问题。

2、强制类型转换需要注意什么?

l 存在继承 / 实现时,就可以进行强制类型转换,编译阶段不会报错。
l 但是,运行时, 如果发现对象的真实类型与 强转后的 类型 不同会报错 ClassCastException )。

3、强制类型转换前?Java建议我们做什么事情?

l 使用 instanceof 判断当前对象的真实类型: 对象 instanceof 类型

 认识final

l final 关键字是最终的意思,可以修饰(类、方法、变量)
l 修饰类:该类被称为最终类,特点是 不能被继承 了。
l 修饰方法:该方法被称为最终方法,特点是 不能被重写 了。
l 修饰变量: 该变量只能被赋值一次
final修饰变量的注意:
final修饰基本类型的变量,变量存储的数据不能被改变。
final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向的队对象的内容是可以被改变的。

常量

l 使用了 static final 修饰的成员变量就被称为常量 ;使用了static和final修饰的成员变量称之为常量。
l 作用: 通常用于记录系统的配置信息。

常量

l 使用了 static final 修饰的成员变量就被称为常量
l 作用: 通常用于记录系统的配置信息。

使用常量记录系统配置信息的优势、执行原理

l 代码可读性更好,可维护性也更好。
l 程序编译后,常量会被“宏替换”:出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接用字面量的性能是一样的。
认识枚举类型:
枚举的格式:
修饰符 enum 枚举类名{
名称1,名称2,。。。。
}
public enum A{
X, Y,  Z;
}

注意:

l 枚举类中的第一行,只能写一些合法的标识符 ( 名称 ) ,多个名称用逗号隔开。
l 这些名称,本质是常量,每个常量都会记住枚举类的一个对象。
Compiled from “A.java"public final class A extends java.lang.Enum<A> {    public static final A X = new A();    public static final A Y = new A();    public static final A Z = new A();
    public static A[] values();    public static A valueOf(java.lang.String);}

l 枚举类的第一行 只能 罗列 一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
l 枚举类的 构造器都是私有的 (写不写都只能是私有的),因此, 枚举 对外不能创建对象。
l 枚举都是最终类,不可以被继承
l 枚举类中,从第二行开始,可以定义类的其他各种成员。
l 编译器为枚举类新增了几个方法,并且 枚举类都是继承:java.lang.Enum 类的,从 enum 类也会继承到一些方法。

枚举的常见应用场景

l 用来表示一组信息,然后作为参数进行传输。

选择定义一个一个的常量来表示一组信息,并作为参数传输

l 参数 不受约束。

选择定义枚举表示一组信息,并作为参数传输

l 代码可读性好, 参数值得到了约束 对使用者更友好, 建议使用!
抽象类:

什么是抽象类?

Java 中有一个关键字叫: abstract 它就 是抽象的意思,可以用它修饰类、成员方法。
abstract 修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。
修饰符 abstract class 类名 {
 
                        修饰符 abstract 返回值类型  方法名称(形参列表)
}
public abstract class A{
            public abstract void test();
}
抽象类的注意事项、特点
l 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
l 类该有的成员(成员变量、方法、构造器)抽象类都可以有。
l 抽象类最主要的特点: 抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
l 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
抽象类、抽象方法是怎样的?
都是用abstract修饰的;抽象方法只有方法签名,不能写方法体
抽象类有哪些注意事项和特点?
抽象类中可以不写抽象方法,但抽象方法的类一定是抽象类
类有的成员(成员变量、方法、构造类)抽象类都具备。
抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
一个类继承抽象类,必须重写抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
使用抽象类的好处
public abstract class Animal{    private String name;    public abstract void cry();    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }

1、抽象类的应用场景和好处是什么?

l 父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现, 我们抽出这样的抽象类,就是为了更好的支持多态。

1、模板方法设计模式解决了什么问题?

l 解决方法中存在重复代码的问题。

2、模板方法设计模式应该怎么写?

l 定义一个抽象类。
l 在里面定义 2 个方法,一个是模板方法:放相同的代码里,一个是抽象方法:具体实现交给子类完成。

3、模板方法建议使用什么关键字修饰?为什么

l 建议使用 final 关键字修饰模板方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值