活动地址:CSDN21天学习挑战赛
包、权限修饰符、final、常量、枚举、抽象类、面向对象三大特征之三:多态
包:是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。
建包的语法格式:package 公司域名倒写.技术名称。报名建议全部英文小写,且具备意义
建包语句必须在第一行,一般IDEA工具会帮助创建
导包 :
相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 包名.类名;
假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问。
权限修饰符:是用来控制一个成员能够被访问的范围。
可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。
权限修饰符的分类和具体作用范围:有四种作用范围由小到大(private -> 缺省 -> protected - > public )
final的作用
final 关键字是最终的意思,可以修饰(类、方法、变量)
修饰类:表明该类是最终类,不能被继承。
修饰方法:表明该方法是最终方法,不能被重写。
修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)。
final修饰变量的注意
final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
常量 :是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。
常量名的命名规范:英文单词全部大写,多个单词下划线连接起来。
常量的作用:通常用来记录系统的配置数据。
public class Configurations {
//项目名称
public static final String ProjectName ='项目名称';
}
常量做信息配置的原理、优势:在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。
维护系统容易,可读性更好。
枚举:是Java中的一种特殊类型
枚举的作用:"是为了做信息的标志和信息的分类"。
定义枚举类的格式:
修饰符 enum 枚举名称{
第一行都是罗列枚举类实例的名称。
}
public enum Season{
SPRING , SUMMER , AUTUMN , WINTER;
}
枚举的特征:
枚举类都是继承了枚举类型:java.lang.Enum
枚举都是最终类,不可以被继承。
构造器都是私有的,枚举对外不能创建对象。
枚举类的第一行默认都是罗列枚举对象的名称的。
枚举类相当于是多例模式。
抽象类:在Java中abstract是抽象的意思,可以修饰类、成员方法。
abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。
修饰符 abstract class 类名{
修饰符 abstract 返回值类型 方法名称(形参列表);
}
1、抽象类、抽象方法是什么样的?
都是用abstract修饰的;抽象方法只有方法签名,不能写方法体。
一个类中定义了抽象方法,这个类必须声明成抽象类。
2、抽象类基本作用是啥?
作为父类,用来被继承的。
3、继承抽象类有哪些要注意?
一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
特征和注意事项
类有的成员(成员变量、方法、构造器)抽象类都具备
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
不能用abstract修饰变量、代码块、构造器。
最重要的特征:得到了抽象方法,失去了创建对象的能力(有得有失)
final和abstract是什么关系?
互斥关系
abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承。
抽象方法定义通用功能让子类重写,final定义的方法子类不能重写。
多态:指对象可以有多种形态。
多态的常见形式
父类类型 对象名称 = new 子类构造器;
多态中成员访问特点
方法调用:编译看左边,运行看右边。
变量调用:编译看左边,运行也看左边。(注意)
多态的前提
有继承/实现关系;有父类引用指向子类对象;有方法重写(多态侧重行为多态)。
- 引用数据类型的类型转换,有几种方式?
自动类型转换、强制类型转换。
- 强制类型转换能解决什么问题?
可以转换成真正的子类类型,从而调用子类独有功能。
- 强制类型转换需要注意什么?
有继承关系/实现的2个类型就可以进行强制转换,编译无问题。
运行时,如果发现强制转换后的类型不是对象真实类型则报错(ClassCastException)- 强制类型转换前最好做什么事情,如何进行?
使用instanceof判断当前对象的真实类型,再进行强制转换
对象变量名 instanceof 真实类型