既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
public interface TestInterface {
//常量
public static final int NUM=10;
//抽象方法
public abstract void f1();
//public default修饰的非抽象方法
public default void f2(){
System.out.println("这是f2方法!!!");
}
//public static修饰的静态非抽象方法
public static void f3(){
System.out.println("这是f3方法!!!");
}
}
类和接口的关系:实现关系,类实现接口,一旦实现一个接口,那么实现类就要重写接口中的全部抽象方法,如果没有全部重写抽象方法,那么这个类可以变成一个抽象类。
//实现类就要重写接口中的全部抽象方法
public class TestCode implements TestInterface{
@Override
//重写接口中所有抽象方法
}
//如果没有全部重写抽象方法,那么这个类可以变成一个抽象类
public abstract class TestCode implements TestInterface{
@Override
//重写接口中我们需要的抽象方法
}
java只有单继承,但有多实现:一个类只能继承一个父类,但是可以实现多个接口。
//多实现
public class TestCode implements TestInterface1,TestInterface2...{
@Override
//重写抽象方法
}
//继承加实现
public class TestCode extends ClassA implements TestInterface1,TestInterface2...{
@Override
//重写抽象方法
}
接口实现类创建
public class Test {
public static void main(String[] args) {
//接口不能实例化对象
TestInterface ti=new TestInterface();//错误
//接口指向实现类-->多态
TestInterface ti=new TestCode();
//也可以直接创建该类的实例
TestCode tc=new TestCode();
}
}
接口和抽象类的区别
问题
为什么要在接口中加入非抽象方法???
如果接口中只能定义抽象方法的话,那么我要是修改接口中的内容,那么对实现类的影响太大了,所有实现类都会受到影响。现在在接口中加入非抽象方法,对实现类没有影响,想调用就去调用即可。
内部类
类的组成:属性,方法,构造器,代码块(普通块,静态块,构造块,同步块),内部类
public class TestOuter{
//属性
int number;
//构造器
public TestOuter(){}
public TestOuter(int number){
this.number=number;
}
//方法
public void f(){
System.out.println("这是一个方法!!!");
//普通块
{
System.out.println("这是一个普通块!!!");
}
}
//构造块
{
System.out.println("这是构造块!!!");
}
//静态块
static{
System.out.println("这是静态块!!!");
}
}
内部类:成员内部类 和 局部内部类
成员内部类
成员内部类(静态的和非静态的)
- 里面有属性,方法,构造器等。
- 修饰符:
private
、default
、protect
、public
、final
、abstract
- 内部类可以访问外部类的内容
- 静态内部类中只能访问外部类被static修饰的属性方法
- 外部类想要访问内部类的东西,需要创建内部类的对象然后进行调用
public class TestOuter{
int number;//自身的属性、方法
public void fun(){}
//非静态成员内部类
public class A{
//属性、方法...
String name;
public void f(){
fun();//内部类可以访问外部类的内容
}
}
//静态成员内部类
static class B{
public void method(){
//静态内部类中只能访问外部类被static修饰的属性方法
}
}
//外部类想要访问内部类的东西,需要创建内部类的对象然后进行调用
A a=new A();
a.f();
public static void main(String[] args){
//创建外部类对象
TestOuter t=new TestOuter();
//创建非静态的成员内部类
TestOuter t=new TestOuter();
TestOuter.A a=t.new A();
//创建静态成员内部类
TestOuter.B b=new TestOuter.B();
}
}
局部内部类
- 在局部内部类中被访问到的变量必须是被
final
修饰的 - 如果类B在整个项目中只使用一次,那么就没有必要单独创建一个B类,使用内部类就可以了
- 匿名内部类
public class TestOuter{
String number;
public void method1(){
//局部内部类
final int num=10;//在局部内部类中被访问到的变量必须是被final修饰的
class A{
public void a(){
System.out.println(num);
}
}
}
//如果类B在整个项目中只使用一次,那么就没有必要单独创建一个B类,使用内部类就可以了
public Comparable method2(){
class B implements Comparable{
@Override
public int CompareTo(Object o){
return 100;
}
}
return new B();
}
![img](https://img-blog.csdnimg.cn/img_convert/d708fa99f4ce40476cfb43bc2190efb1.png)
![img](https://img-blog.csdnimg.cn/img_convert/b0116339b69e93d379806dbb1769dd34.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
63372410)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**