前言:本次学习的主要内容有:单例模式,继承,重写,多态,接口,抽象类,super;
其中单例模式,多态中循环输出的方法还是有点抽象得多多理解
一,单例模式
单例模式的目的是为了一个类中只有一个对象输出;
实现单例模式的方法也很简单,可分为两种;
1,懒汉式写法;
首先私有化一个函数(也就是私有化一个构造器);private+类名(){};
定义一个类方法(也就是定义一个函数用于接收单例对象)用于获取单例对象;public+static(可以在测试类不用创建对象直接调用)+类名(定义一个类名类型的返回值)+函数名(){
由于无法知道是否为一个对象,所以在这里还要设置一个if判断语句
if(属性名==null)
属性名=new 类名;(重新创建一个该类的对象)};
定义一个该类类型的属性;private+static+类名+属性名;
最后进行返回;return 属性名;
2,饿汉式写法;
这种写法是直接省去了if判断过程,直接再用类名定义一个属性的时候直接创建一个对象;其他都不用变,只是将懒汉式方法的if判断过程直接省略,然后再用类名赋值时就可以直接创建对象了;
二,继承;
继承相对来说比较好理解;顾名思义继承就是有一个父类,一个子类;
1.当你在父类创建属性,创建方法时使用extends就可以继承;
2.需要注意的是在使用继承时,被private所修饰的方法和属性是不可以被继承的
3.除了继承父类的属性和方法,子类自己还可以拥有自己的属性和方法;
4,当你继承父类的属性和方法后,调用时会先查看子类有没有,在寻找父类;
三,super;
super是一个可以直接调用父类的关键字;使用super可以直接先调用父类的方法或者属性;
子类实例化的过程中,父类构造器先被调用,然后再调用子类的构造器 子类实例化的过程中,父类构造器先被调用,然后再调用子类的构造器
super()的调用要放在第一行。
四,重写
非静态,非private,非final;不能重写
重写是为了当父类的方法已经无法满足子类的需求了,所以需要子类进行函数重写;
然后想调用重写的方法,可以在子类中创建一个方法,在这个方法中可以使用this,super关键字进行调用;
五,多态
多态,顾名思义就是创建许多类,然后继承一个父类,并可以重写父类的方法
想要表示出来,可以使用数组循环;首先由于子类都继承一个父类,那就可以创建一个父类类型的数组;父类名+数组名称【】={new 子类类名};
使用一个for循环将创建的对象输出来;for(。。。){
封装的方法名(数组名【i】);
然后封装一个方法;public static void 方法名称(父类类名 传一个参数名称){
参数名称.子类方法名();
}
多态还有一个思想就是可以直接使用父类类名去创建一个子类对象;
但是要注意的是,创建完对象后;
调用时,属性会直接调用父类的属性
方法则是调用子类重写的方法;
六,抽象类;
只是定义一个模板;定义方法时还不能有方法体{};
抽象类在calss前加上abstract使该类成为抽象类;抽象方法也必须加上abstract,在抽象类中也可以有普通的方法;
抽象类中不能定义属性;
-
抽象类不能实例化,即不能创建对象,只能被继承,然后实例化。
-
继承抽象类的非抽象类必须实现抽象方法。
-
抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类。
-
抽象类可以继承抽象类,可以不用实现抽象方法。
-
抽象的方法不能private,final,static修饰。
七,接口(interface);
-
接口不能实例化,需要有类(重写)使用implements来实现接口,并且实现接口的抽象方法。定义方法void+方法名();
-
接口中的方法默认是抽象的。
-
接口的方法不能使用private和final、static修饰。
-
接口可以多继承。抽象类只能单继承
-
接口可以定义常量,常量默认会带public static final 。该常量不能修改,一般我们通过【接口名.常量】来访问。
八,接口与抽象类的差别;
抽象类只能单继承,而接口可以实现多继承,例如,门可以安装一个防盗系统,但并不是所有门都要这时如果是抽象类定义的话,那么所有要继承这个抽象类的子类都得重写这个警报方法。
而如果是接口就不一样,接口可以直接在单独创建一个警报接口如果门需要的话,就只要加上这个接口就可以了,如果不需要,就不用加,照样可以实现正常门的功能;
!!!!!jdk在1.8版本后,接口可以有方法体,但是得在前面加上static或者dafult关键字进行修饰;dafult关键字修饰需要创建对象才能接受