面向对象(4)
如果一个类没有用extends显性的表示继承一个类,那么他就继承Object类,
多态:不同的对象对同一个指令有不同的执行
存在继承,方法重写,父类引用指向子类对象
重载:
在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(method overloading)。
参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。
重载是面向对象的一个基本特性。参数列表:个数,顺序,类型的不同,重载存在由于同类中
重写存在于子类中,子类对父类的方法进行重写
向上转型:父类引用指向子类对象
向下转型:必须先向上转型,再向下转型(强转),当需要调用子类中独有的方法时,父类引用转向子类对象引用,实际上还是转换成子类相对应的子类引用,
package name.zrm.ooProgram.oop1;
//一个类如果没有显性的继承一个类那么他相当于继承了Object
public class Demo extends Object{
public static void main(String[] args) {
Object o = new Demo();
Demo demo = (Demo)o;
}
}
接口:
接口中的变量都是静态常量:
接口中变量都是public static final修饰的,不添加默认为这个;必须赋初值
接口中的抽象方法都是public abstract修饰,可以不加,默认都是这个,现在接口中也可以实现方法为默认方法(default)修饰
package name.zrm.ooProgram.oop1;
public interface Fly {
//接口中变量都是静态常量,为public static final修饰,无论加不加都是这个,不加的时候
//会默认添加,且不能使用其他的方法修饰符
int X = 10;
public static final int Y = 10;
//方法默认为抽象方法,且是public abstract修饰,可以省略不写,但是默认添加
void method();
public abstract void method1();
//接口中现在可以添加实现方法,但是方法为默认方法只能是default修饰,且不能省略
default void ab(){
System.out.println(10);
}
}
抽象类:
package name.zrm.ooProgram.oop1;
public abstract class Abstact1{
//抽象类中成员变量可以是任何权限修饰的,与接口不一样
int age;//default
private int age1;
protected int age2;
public int age3;
//抽象方法为权限修饰符(除了私有)+abstract修饰,跟接口有不同,且不能省略
abstract void a();//default
protected abstract int aa();
public abstract int m();
}
抽象类的抽象方法在被子类实现的时候,权限修饰符权限不能比父类中抽象方法的权限低
在继承和实现接口的时候,子类必须实现所有的抽象方法,抽象类实现接口的时候可以不用实现接口中的方法
抽象类中可以有构造方法,接口不能有构造方法,抽象类和接口都不能实例化
内部类:
package name.zrm.ooProgram.oop1;
public class Main {
//内部类
class M {
int x;
int y;
int method() {
return 10;
}
}
public static void main(String[] args) {
//创建内部类对象
Main.M m = new Main().new M();
}
}
内部类可以访问外部类的私有是属性
package name.zrm.ooProgram.oop1;
public class Main {
//内部类
class M {
int x;
int y;
}
//匿名内部类
T t = new T() {
public int method() {
return 10;
}
};
//静态内部类
static class inner{
}
public static void main(String[] args) {
//创建内部类对象
Main.M m = new Main().new M();
//创建一个静态内部类
Main.inner inner = new Main.inner();
}
}