DAY5:尚学堂高琪JAVA(49~55)

接口

为什么需要接口?与抽象类的区别?

  • 接口就是比“抽象类”还抽象的“抽象类”,可以更加规范的对子类进行约束。全面实现了:规范和具体实现的分离。
  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是……则必须能……”的思想。
  • 接口的本质是契约
  • 开发项目往往都是面向接口编程

如何定义接口?

  • [访问修饰符]interface 接口名 [extends 父接口1,父接口2]{
    常量定义 //总是 public static final
    方法定义 //总是 public abstract
    }

  • 子类通过implements来实现接口中的规范

  • 接口不能创建实例,但是可以用于声明引用变量类型(类似于上一节多态图片)

  • 一个类实现了接口,必须实现其中所有的方法,并且这些方法只能是public的

  • 接口支持多继承,则类在继承该接口时也需实现继承过程中所有方法。

package testInterface;
public interface MyInterface {//接口中只有常量和抽象方法
	/*public static final*/ int MaxSpeed=1200;//接口中这仨修饰词默认有
	/*public abstract*/public void test01();
	public int test02(int a,int b);
}

package testInterface;
import java.util.Scanner;
public class MyClass implements MyInterface{
	@Override
	public void test01() {
		System.out.println(MyInterface.MaxSpeed);
	}
	@Override
	public int test02(int a, int b) {
		return a+b;
	}
}

package abstractClass;
import java.util.Scanner;
import testInterface.MyClass;
public class test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a ,b ;
		System.out.println("input a number:");
		Scanner input=new Scanner(System.in);
		a=input.nextInt();
		System.out.println("input a number:");
		Scanner input2=new Scanner(System.in);
		b=input2.nextInt();
		MyClass myClass=new MyClass();
//		myClass.test01();
		System.out.println("resule:"+myClass.test02(a,b));

	}

}

回调(callback)

package testCallback;
public class darwFrame {
	public static void darwFrame(MyFrame f) {//传入父类对象f
		System.out.println("启动线程");
		System.out.println("增加循环");
		System.out.println("查看消息栈");
		//画窗口
		f.paint();//具体实现根据f对象来定
		
		System.out.println("启动缓存,增加效率");
	}
	public static void main(String[] args) {
		darwFrame(new GameFrame01());
	}
}

package testCallback;
public class MyFrame {
	public void paint() {
		// TODO Auto-generated method stub
		System.out.println("开始画图了");
	}
}
class GameFrame01 extends MyFrame{
	@Override
	public void paint() {
		// TODO Auto-generated method stub
		System.out.println("游戏画图01");
	}
}
class GameFrame02 extends MyFrame{
	@Override
	public void paint() {
		// TODO Auto-generated method stub
		System.out.println("游戏画图02");
	}
}

数组

  1. 数组是相同数据类型的有序集合
  2. 数组也是对象,数组元素相当于对象的成员变量
  3. 数组长度是确定的,不可变的。
    基本语法
package testArray;
import to100.Car;
public class test02 {
	public static void main(String[] args) {
		//声明
		int[] a;
		int b[];
		//创建数组对象
		a=new int[3];
		b=new int[3];
		//初始化
		//1.默认初始化:数组元素相当于对象的成员变量,默认值和成员变量的规则一样
		//2.动态初始化
		a[0]=252;
		a[1]=222;
		a[2]=242;
		//3.静态初始化
		int c[]={11,12,33,44};
		Car2[] cars={new Car2("bwm"),
				new Car2("b"),
				new Car2("b")};
	}
}

字符串

字符串:不可变字符序列
String str3=“def"是一种非常特殊的形式,和new 有本质的区别。它是java中唯一不需要new 就可以产生对象的途径。
String str3 = “def”; 先在内存中找是不是有"def"这个对象,如果有,就让str指向那个"def”.如果内存里没有"def",就创建一个新的对象保存"def". String str=new String (“abcd”) 就是不管内存里是不是已经有"abcd"这个对象,都新建一个对象保存"abcd"。
在这里插入图片描述

由String类中equals的源码可知,该方法判断的是2个对象的内容是否相等。
在这里插入图片描述
所以上图中2次调用equal都为true。
由下图的内存分析图可知 2次等于的调用结果不同,(等于 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40802113/article/details/86607304
今日推荐