JAVA小白进阶day07

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

3、继承构造方法的调用
子类创建对象,默认调用父类的无参构造方法
如果父类没定义为无参的构造方法,那么子类使用super调用父类的构造方法
4、多态:对象的多态
父类声明,子类创建
编译时多态 - 重载
运行时多态 - 重写
看谁声明,若方法重写,调用子类方法
应用:
对象的造型:父类与子类之间的强制转换instanceof
5、static
使用:类名.static的成员方法
static修饰变量(类在就在,占内存空间)
成员变量:类变量和实例变量
static不能修饰局部变量,内部类
static修饰方法
静态方法:直接访问静态成员
不能重写,可以重载
static块
父类静态->子类静态块->父类构造块
->父类构造方法->子类构造块->子类构造方法
6、final
变量:常量 ,常量值不能被改变,数组只是地址不变,元素值可变
方法:不能被重写
类:不能有子类
final int[] NUM ={1,2,3};
NUM[0] = 11;

================================================
新学
abstract
1、抽象方法:由abstract修饰的方法
2、特点:没有方法体
3、抽象类:由abstract修饰的类 -------模板
4、特点:不能创建对象
5、抽象类可以没有抽象方法
6、抽象类有子类创建对象
7、子类可创建对象,实现所有的抽象方法
没有实现全部的抽象方法,当前类声明为抽象类
interface
1、定义接口:
interface 接口名{
变量:int x = 10;//默认public static final 修饰,不能修改
方法:jdk1.8之前,接口里边的方法都是抽象方法,
可省略abstract,默认访问修饰符为public
1.8之后的可能有普通方法
}
2、使用接口 implements
实现接口的类,要实现接口中的方法,才可创建对象
如果不实现接口中的所有方法必须由abstract修饰
3、接口和接口之间是继承关系

interface A{}
	interface B extends A{}
	interface C{}

4、类和接口之间是实现关系,可实现多个接口

class Demo extends Object1 implements B,C{}

接口JDK8新特性:
1、接口可以定义普通方法必须加default
定义静态方法必须加static
2、default修饰的方法由显示类调用
static修饰的方法 可以有接口名直接调用
接口不能创建对象
3、实现类的接口和父类有同名方法,访问父类
4、如果两个接口中都定义了同名方法,会出现编译错误
解决方案,实现类必须重写该方法
IDemo2.super.test()
5、函数式接口:
接口中只有一个抽象方法


接口和抽象类的区别***

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

内部类
1、类体内部类(可以访问外部类的成员,
不可以定义静态成员,可定义静态常量)
外部类.内部类 对象名 = new 外部类().new 内部类();
内部类为static修饰
外部类.内部类 对象名 = new 外部类.内部类();
2、方法内的内部类
3、匿名类

public class Demo4{
	  //创建了Object子类的对象
	  Object obj = new Object(){
		public void f(){
			System.out.prinln("hello");
		}
		public String toString(){
			return "hello";
		}
	  };//匿名类,继承Object类
	//若其继承抽象类或接口,须实现其方法
	  public static void main(String[] args){
		//obj.f();不能这样使用,不能用父类调用子类的方法
		//重写父类方法后,可调用该方法
		System.out.prinln(new Demo4().obj.toString());
		//obj为static修饰的,必须用对象打点调用
	  }
}

练习:

public interface IA {
	void ma();
}
public class MyClass {
	public static void method(IA ia) {
		System.out.println("in method");
		ia.ma();
	}
}
public class TesrInnerClass {
	public static void main(String[] args) {
		MyClass.method(new IA() {
			//打印in method,后边直接定义匿名类为IA的子类,在myclass的ia.ma()时直接用自己的ma()方法
			public void ma() {//打印 ma in anonymons inner class
				System.out.println("ma in anonymons inner class");
			}
		});
		class MyMaClass implements IA{
			public void ma() {
				System.out.println("ma in local inner class");
			}
		}
		MyClass.method(new MyMaClass());
		//打印 in method
		//打印 ma in local inner class

	}
}

♥※♥

【Java面试题】Double和double 区别

1、Double是java定义的类,而double是预定义数据类型(8种中的一种)

2、Double就好比是对double类型的封装,内置很多方法可以实现String到double的转换,以及获取各种double类型的属性值(MAX_VALUE、SIZE等等)

你可能感兴趣的:(JAVA小白进阶day07)