类与对象
继承例题
https://www.bilibili.com/video/BV1PU4y1E7nX?p=55&vd_source=8f80327daa664c039f5c342a25bcbbae(B站千峰马剑威Java基础入门视频第P55,记录的重要学习内容之一)
final关键字
作用:
- 声明一个常量(常用规范命名建议全大写),修饰属性或修饰局部变量(最终变量),也成常量(不能改变);
- 声明一个方法,该方法为最终方法,且只能被子类继承,但是不能被子类重写;
- 声明一个类,该类为最终类,没有子类的类,无法被继承;
- 在方法参数中使用,在内部类中不能修改参数值,在内部类中详解。
public class Test{
public static void main(String[] args){
System.out.println(Constant.TEN_NUM);
}
}
//常量类,常量可以另起一类定义防止访问时出问题
public final class Constant{
public static final int TEN_NUM = 10;//常量通常这么定义(权限自定义)
}
抽象类
很多具有相同特征的和行为的对象可以抽象为一个类,很多和相同特征和行为的类可以抽象为一个抽象类;使用abstract关键字声明类为抽象类。
抽象类中有抽象方法、成员变量、构造方法和其他成员方法。
抽象类中的抽象方法,即只有定义没有实现,也就是没有大括号的内容直接把大括号换位了分号,然后在具体类中重写方法实现方法的具体功能,也就是说抽象类本身并不能运行也不能被实例化,就是用来作为父类被继承的。
抽象类不能个被声明为final
public class Test{
public static void main(String[] args){
Villa villa = new Villa();
villa.color();
villa.buildFloor();
villa.buildTepy();
}
}
public abstract class Building{
private String name;
private int age;
public Building(String name) {
this.name = name;
}
// 抽象方法 没有方法的实现
public abstract void buildTepy();
//成员方法
public void color() {
System.out.println("colorful");
}
}
//抽象方法可以继承抽象方法
public abstract class House extends Building{
public abstract void buildFloor();
}
public class Villa extends House{
@Override
public void color() {
// TODO Auto-generated method stub
System.out.println("red");
}
//在子类中实现
@Override
public void buildTepy(){
System.out.println("别墅");
}
@Override
public void buildFloor(){
System.out.println("3层");
}
}
接口
接口方便我们拓展代码,如果写好的系统想去添加功能,不用去找代码的相关模块并修改,直接使用接口添加,然后在主函数中电泳即可。
接口相当于特殊的抽象类,接口里面都是抽象方法,通过接口不能创建对象。
定义格式:
修饰符 interface 接口名 {
常量
抽象方法
default修饰的方法
static 修饰的方法
}
public class Test{
public static void main(String[] args){
Villa villa = new Villa();
villa.color();
villa.buildFloor();
villa.buildTepy();
}
}
//与抽象类类似,接口类也可以被继承,这里不再写出,有兴趣可以尝试
public abstract class House{
void buildFloor();//接口方法中可以不用修饰符,默认为public abstract
void buildTepy();
void color();
//JDK1.8之后可用
public default void print(){
System.out.println("default");
}
}
public class Villa extends House{
@Override
public void color() {
// TODO Auto-generated method stub
System.out.println("red");
}
//在子类中实现
@Override
public void buildTepy(){
System.out.println("别墅");
}
@Override
public void buildFloor(){
System.out.println("3层");
}
}
多态
多态性是对象在运行的过程中的多种形态。父类变量可以引用子类的对象,调用相同的方法,展示多种形态(表现不一样),方法的重载和重写也是多态。
例:Dog dog = new SingleDog();
对象的多态性:
**向上转型:**将子类实例转为父类引用,会自动转换:父类 父类对象 = 子类实例 例:int i = ‘a’;
**向下转型:**将父类实例转为子类引用,强制转换: 子类 子类对象 = 父类实例 例:char c = (char)97;
instanceof关键字
用于检查对象是否为指定的类型,通常把父类强制转换为子类引用时要使用,以避免发生类型转换异常。
对象 instanceof 类型 返回boolean类型值
例:
if(singleDog instanceof Dog){}
一般用于判断一个对象是否为某个类的实例。