黑马程序员JAVA(11)super关键字的使用,this关键字的使用,继承,抽象方法,抽象类的使用群主发红包,接口,接口的默认方法,私有方法

super关键字的用法有三种:
1。在子类的成员方法中,访问父类的成员变量
2.在子类的成员方法中,访问父类的成员方法
3.在子类的构造方法中,访问父类的构造方法

public class Fu{
int num=10;
public void method(){}



public class Zi extends Fu{
	int num=20;
	public Zi(){
	super();}
public void methodZi(){
	System.out.println(num);//20
	System.out.println(super.num);//10}
	super.method()//访问父类中的method
	System.out.println("子类的方法");}

this关键字用来访问本类当中的内容
1.在本类的成员方法中,访问本类的成员变量
public class Zi extends Fu{
int num=20;
public Zi(){
this(n:123;)//本类的无参构造调用本类的有参构造}
public Zi(int n){
}
public void showNum(){
int num=10;
System.out.println(num);//局部变量
System.out.println(num);//本类当中的成员变量
}
public void methodB(){
this.methodA();
System.out.println(’'BBB");
}
public void methodA(){
System.out.println(“AAA”)}
2.在本类的成员方法中,访问本类的另一个成员方法
3.在本类的构造方法中访问本类的另一个构造方法
在第三种用法当中要注意:this(…)调用也必须是构造方法的第一个语句,唯一一个。super和this两种构造调用不能同时使用

public class Zi extends Fu(){
	int num=20;
public void method(){
	super.method();//调用了父类的方法
	System.out.println("子类的方法执行");
}
public void show(){
		int num=30;
	System.out.println(num);//30
	System.out.println(this.num);//20
	System.out.println(super.num);//10

public class Demo{
	public static void main(String[]args){
		Zi zi=new Zi();
		zi.show();
		zi.method();
	

在这里插入图片描述
JAVA语言是单继承的,一个类的直接父类只能有唯一的一个。
class A{}
class B extends A{}//正确
class C{}
class D extends A,C{}
在这里插入图片描述
2.JAVA语言可以多级继承
我有一个父亲,我的父亲还有一个父亲,也就是爷爷。
class A{}
class B extends A{}//正确
class C extends B{}//正确
一个子类的直接父类是唯一的,但是一个父类可以有很多个子类。
class A{}
class B extends A{}//正确
class C extends A{}//正确
在这里插入图片描述
在这里插入图片描述
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。
抽象类,抽象方法所在的类,必须是抽象类才行,在class之前写上abstract
public abstract class Animal{
//这是一个抽象方法,代表吃东西,但是具体吃什么(大括号里的内容)不确定
public abstract void eat()’
//这是普通的成员方法
public void normalMethod(){}
如何使用抽象类和抽象方法:
1不能直接创建new抽象类对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写抽象父类当中的所有的抽象方法
覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号
4.创建子类对象进行使用。
抽象类的注意事项:
1.抽象类不能创建对象,如果创建,编译无法通过报错,只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类的构造方法.
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类的对象,通常用于某些特殊的类结构设计。
4.抽象类的子类,必须重写抽象父类当中的所有的抽象方法,否则,编译无法通过而报错,除非该子类也是抽象类。
理解:假设不重写所有抽象方法,则类中可能包含抽象方法,那么创建对象后,调用抽象的方法,没有意义。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个抽象类中不一定含有抽象方法,只要保证抽象方法所在的类是抽象类即可。这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用途。

综合案例发红包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接口就是一种公共的规范标准。
只要符合规范标准,就可以大家通用。
接口就是多个类的公共规范。接口是一种引用数据类型,最重要的内容就是其中的:抽象方法。
如何定义一个接口的格式:
public interface 接口名称{//接口内容}
备注:换成关键字interface之后,编译生成的字节码文件仍然是:java–>.class
如果是JAVA7,那么接口中可以包含的内容有:
1.常量2.抽象方法
如果是JAVA 8还可以额外包含有:3.默认方法4.静态方法
如果是JAVA9,还可以额外包含有5.私有方法
1.接口当中的抽象方法,修饰符必须是两个固定的关键字
2.这两个关键字修饰符,可以选择性地省略
3.方法的三要素可以随意定义
public interface MyInterfaceAbstract{
//这是一个抽象方法
public abstract void methodAbs();
abstract void methodAbs2();
public void methodAbs();
void methodAbs4()}//这四个都是抽象方法
接口使用步骤1.接口不能直接使用,必须有一个实现类
来实现该接口。
格式:public class 实现类名称 implements 接口名称{}
2.接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
去掉abstract关键字,加上方法体大括号。
3.创建实现类的对象,进行使用。
注意事项:如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己必须是抽象类。在这里插入图片描述
在这里插入图片描述
这是第一个方法。
这是第二个方法。
从JAVA8开始,接口里允许定义默认方法。
格式:public default 返回值类型 方法名称(参数列表){方法体};
备注:接口当中的默认方法,可以解决接口升级的问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
默认的方法会被实现类继承下去。
1.接口的默认方法,可以通过接口实现类对象,直接调用
2.接口的默认方法,也可以被接口实现类进行覆盖重写
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
从java8开始,接口当中允许定义静态方法。
格式:public static返回值类型 方法名称(参数列表){方法体}
提示:就是将abstract或者default换成static即可,带上方法体
注意:不能通过接口实现类对象来调用接口当中的静态方法。
正确用法:通过接口名称,直接调用其中的静态方法。
格式:接口名称.静态方法名(参数);静态和对象没有关系,和类有关系。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间的重复代码的问题,但是这个共有方法不应该让实现类使用,应该是私有化的。
解决方案:从JAVA9开始,接口当中允许定义私有方法,
1.普通私有方法:解决多个默认方法之间重复代码的问题
格式:private 返回值类型 方法名称(参数列表){方法体}
2.静态私有方法,解决多个静态方法之间重复代码的问题
格式 private static 返回值类型 方法名称(参数列表){方法体);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43428283/article/details/89145698
今日推荐