java基础知识第七天,abstract和interface以及内部类概念

复习:访问修饰符
方法的重写
继承关系
方法名,参数列表,返回类型(子类要小于等于父类)相同
访问修饰符的大小需要:子类大于等于父类(子类>=父类)
异常(非运行时异常):子类<=父类
作用:扩展父类方法的功能

继承构造方法的调用

子类创建对象,默认调用父类的无参构造方法
如果父类没定义无参的构造方法,那么子类使用super调用父类的构造方法

多态:对象的多态

父类声明=子类的创建

编译时多态–重载
运行时多态–重写

应用:

对象的造型:父子类之间的强制转换!使用:instanceof
—————————————————————————————————

static

static使用: 类名.static的成员
static修饰变量:成员变量:类变量(是所有对象共享的)和实例变量(对象私有的)
—————————————————————————————————
static修饰方法:静态方法只能直接访问静态成员!静态成员在加载时已经初始化了
类方法调用静态方法需要使用新建对象调用静态方法
—————————————————————————————————
static块
父类静态块—子类静态块—父类构造块—父类构造方法—子类构造块—子类构造方法
—————————————————————————————————
final
变量:常量——常量值不能改变???
方法:不能被重写
类:不能被继承不能有子类

final int[] NIM = {1,2,3};


abstract

抽象方法:由abstract修饰的方法
特点:没有方法体
抽象类:由abstract修饰的类
特点

1、不能创建对象
2、抽象类中可以没有抽象方法
3、抽象类由子类创建对象,但是需要将父类的所有的抽象方法都实现,
4、没有实现所有的抽象方法,需要把当前类声明为抽象类

interface

记录了不同的对象有相同的特点
定义接口:interface 接口名{}
变量:int x = 10; public static final 修饰的
方法:jdk1.8之前,抽象方法,可以省略abstract,默认的访问修饰符
public void f();
}

使用接口:实现接口的类,要实现接口中的所有方法,才可以创建对象
如果不实现接口中的所有方法,当前类必须为abstract的类

接口和接口之间是继承关系:
interface A{}
interface B extends A{}
interface C{}

类和接口之间是实现,可以实现多个接口,用逗号隔开即可

接口jdk8新特性:

1接口中可以定义普通方法

default void test(){
		System.out.println("test");
	}
	static void test2(){
		System.out.println("test2");
	}

2default修饰的方法由实现类调用

static修饰的方法可以由接口名直接调用,接口不能创建对象

3.实现类的接口和父类定义的方法同名,如何访问?

答:调用父类的方法

4如果两个接口中都定义了同名方法,则怎样?

答:子类必须重写同名方法

5.函数式接口

接口中只有一个抽象方法

接口和抽象类的区别:

抽象类接口
模板类不同类型的公共的行为(规范JDBC)
不能多继承的可以多继承
有构造方法没有构造方法
变量是普通变量都是公有静态常量
都是普通方法普通方法由default或者static修饰
抽象方法没有默认访问修饰符访问修饰符是public

——————————————————————————————

内部类:

类体内部类:

非静态内部类:可以访问外部类的成员
不可以定义静态成员,都是可以定义静态常量
内部类创建对象,调用内部方法:外部类.内部类 名称 =外部类.new 内部类

静态内部类:可以访问外部静态成员
可以定义静态和非静态成员
创建对象:外部类.内部类 名称=new 外部类.内部类

方法内的内部类:

可以访问外部类成员
不能经验静态成员,但可以定义静态常量
方法内的变量在被内部类访问后,变量表示为常量!

匿名类

前面是接口的话,则需要接口方法的实现
匿名类可以创建对象,可以创建子类的对象
父类声明,子类创建的时候,需要看父类有没有这个调用的方法

静态方法不能直接访问实例成员,需要访问调用,需要先创建实例对象

package cn_tedu_demo;
interface Calculator{
	int calc(int a,int b);
}
public class Demo01Calculator {

	public static void main(String[] args) {
		//调用invokeCalc方法。方法的参数使用匿名内部类实现
		invokeCalc(1,1,new Calculator(){
			@Override
			public int calc(int a, int b) {
				return a+b;
			}
		});
		//lambda表达式
		invokeCalc(1,2,(a,b)->a+b);
	}
	public static void invokeCalc(int a,int b,Calculator c){
		int sum = c.calc(a,b);
		System.out.println(sum);
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值