继承,super,this,抽象类,接口,多态

1 继承

共性抽取,多态的前提。

1.1 格式:

public class Fu{ ... }

public class Zi extends Fu{... }

1.2 继承后的成员变量

1.2.1 成员变量不重名

无任何影响,正常使用。

1.2.2 成员变量重名

如果父类和子类的成员变量重名,则在子类方法中访问子类的变量可直接访问,如需访问父类中的重名变量,则需使用super关键字,使用方式类似于this(PS:子类不能访问父类的私有成员变量。)

1.3继承后的成员方法

1.3.1 成员方法不重名

正常使用,先在子类中查找,没有则向父类查找。

1.3.2 成员方法重名

此时的访问叫做方法重写
方法重写:子类中出现与父类中的方法一样(三要素相同),子类的方法会覆盖父类的方法。声明不变重新定义
重写的注意事项子类的方法权限必须大于等于父类,方法三要素相同。

1.4 继承中的构造方法

1.子类无法继承父类的构造方法。
2.子类的构造方法中默认有super();调用父类的构造方法。
3.父类先构造,子类后构造;子类先析构,父类后析构。

class Fu{ ... }
class Zi extends Fu{
//super(),调用父类构造方法
super();
System.out.println("Zi()");
}

1.5 继承的特点

1.Java中不能多继承。
2.Java中可以多级继承。

2 super 和 this

2.1 父类空间优先于子类对象产生

父类空间先产生子类对象空间包含父类空间,即拥自己的空间和可以访问父类的空间。如果有了private,则不能访问父类的这些私有成员。在代码中的体现为子类构造方法第一行super();优先构造父类。

2.2 super 和 this含义及用法

含义
1.super:代表父类,可以当成父类的引用
2.this:代表调用的对象,为调用对象的引用
用法
1.访问成员

this.成员变量‐‐本类的
super.成员变量‐‐父类的
this.成员方法名()‐‐本类的
super.成员方法名()‐‐父类的

2.访问方法

this(...)‐‐本类的构造方法
super(...)‐‐父类的构造方法

3 抽象类

抽象类是包含抽象方法的类,而抽象方法是没有方法体的方法

3.1 抽象方法和抽象类的格式

抽象方法

修饰符 abstract 返回值类型 方法名(参数列表);

抽象类

public abstract class 类名字{}

3.2 抽象的使用

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

3.3 注意事项

1.抽象类不能创建对象
2.抽象类可以有构造方法。(供子类继承时构造父类使用,子类构造方法中有默认的super();)
3.抽象类中,不一定包含抽象方法但是有抽象方法的类必定是抽象类
4.抽象类的子类,必须重写抽象父类中所有的抽象方法除非子类也为抽象类

4 接口

4.1 概述

接口是Java中的另一个引用类型,它不是类内部主要封装了方法,包括抽象方法,默认方法,静态方法,私有方法。

4.2 接口的格式

定义接口

public interface 接口名称{
//抽象方法
//默认方法
//静态方法
//私有方法
}

定义其中的方法和常量

public interface InterFace	Name{
	public abstract void method1();//抽象方法
	public default void method2(){
	//执行语句
	}                             //默认方法
	public static void method3(){
	//执行语句
	}                             //静态方法
	private void method4(){
	//执行语句
	}                             //私有方法
	private static void method()5{
	//执行语句
    }                             //私有静态方法
    public static final NUM = 10; //定义常量
}

注意事项
1.抽象方法的abstract关键字可省略。
2.默认方法的default关键字不可省略,供子类调用或重写。
3.静态方法供接口直接调用。
4.私有方法供接口中的默认方法调用。
5.私有静态方法供接口中的静态方法调用。

4.3 实现

非抽象类实现(类似继承)接口

public interface InterFace	Name{
	public abstract void method();//抽象方法
	public default void method(){
	//执行语句
	}                             //默认方法
	public static void method2(){
	//执行语句
	}                             //静态方法
	private void method(){
	//执行语句
	}                             //私有方法
class 类名 implements 接口名{
//重写接口中抽象方法【必须】
//重写接口中默认方法【可选】
}

可直接通过实现类的对象调用方法使用抽象方法和默认方法。
静态方法只能通过接口调用。
私有方法供接口中的默认方法调用。
私有静态方法供接口中的静态方法调用

4.4 接口的多实现

4.4.1 格式

继承不能多实现,但是接口的实现却可以多实现,即一个实现类可以实现多个接口。

class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3...{
//重写接口中抽象方法【必须】
//重写接口中默认方法【不重名时可选】
}

4.4.2 抽象方法重名

如果多个接口有重名的抽象方法则实现类必须重写该抽象方法

4.4.3 默认方法重名

如果多个接口有重名的默认方法则实现类必须重写该默认函数

4.4.4 静态方法重名

如果多个接口有重名的静态方法,不必重写该静态方法,因为静态方法只能通过接口调用

4.4.5 优先级问题(父类和接口的默认方法重名)

如果多个接口的默认方法和实现类的父类中的成员方法重名,则优先调用父类的成员方法

PS:接口没有构造方法不能创建对象并且没有代码块

5 多态

5.1 多态的格式

父类类型 变量名 = new 子类对象;
变量名.方法名();

5.2 引用类型转换

5.2.1 向上转型

父类引用指向子类对象,默认的。(类似于基本数据类型的自动转化)

父类类型 变量名 = new 子类类型();

5.2.2 向下转型

父类类型向子类转换的过程,强制的。(类似于基本数据类型的强制转换)

子类类型 变量名 = (子类类型) 父类变量名;

5.3 instanceof

在向下转型中会出现错误。(例如Cat向上转型为Animal,那这个Animal不能向下转型为Dog)
instanceof关键字就是用来判断该对象属不属于该数据类型

变量名 instanceof 数据类型
如果变量属于该数据类型,返回true
如果变量不属于该数据类型,返回false

PS

Fu fu = new Zi();
fu.成员变量;
fu.成员方法;

编译看左(Fu fu),运行看右(Zi())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值