复习:
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等等)