java基础(9)

抽象类

  • 概念:普通的java类再抽象一步,得到更抽象的模板,其不能实例化
  • 意义:用来被继承
  • 作用:可以提高代码的灵活性,使得编程变得通用。
  • 声明语法:

    • 表示:public abstract class 类名{类体}
    • 解释
      • 类体:可以有属性,方法(实例及静态方法、抽象方法),构造方法。。。
      • 抽象方法:
        • 表示:public abstract 返回值类型 方法名称(参数列表);
        • 意义:就是用来被子类重写。
  • 抽象类与抽象方法的关系

    • 抽象类中不一定有抽象方法,但有抽象方法一定有抽象类。

    • 一个子类继承了一个抽象的父类,要么实现类中的抽象方法,要么将自己定义为抽象类。

  • abstract使用注意

    • 不能修饰常量;
    • 不能修饰静态;
    • 不能修饰final修饰的方法及类

接口

  • 意义:为了解决java类中类单继承的缺陷。
  • 作用:可以提高代码的灵活性,使得编程变得通用。
  • 声明语法
    • 表示:public interface 接口名称{接口体}
    • 解释:
      • 接口体:可以有静态的常量,抽象方法,静态方法。(没有构造方法)
  • 实现方法:

    • public class 实现类 implements 接口名称{}
    • public interface 接口名称 extends 接口列表{接口体}
    • public class 实现类 extends 抽象类 implements 接口列表{}
  • 应用:后面的编程基本上是面向接口编程,其实质是使用接口进行结构搭建,具体功能根据需要具体实现。

多态

  • 概念:对外表现一种形式,对内存在多种实现。
  • 多角度理解
    • 宏观:从不同类之间的多态关系来看,要实现多态,必须有继承或者实现,方法的重写,父类的引用指向子类的对象。
    • 微观:从一个类的多态来看。必须要有方法重载。
    • 注意事项:
      • 多态必须有继承或者实现,方法的重写,父类的引用指向子类的对象。
      • 多态环境下,子父类之间出现同名的属性时,访问父类。
      • 多态环境下,访问同名方法时,编译期看左边,运行时访问右边。
      • 多态环境下,访问同名静态方法时,访问父类。
      • 多态环境下,父类不能访问子类新扩展的方法。
    • 应用
      • 返回值
      • 多态参数

多态参数

  • 问题:父类不能访问子类新扩展的方法,如果想访问该怎么办?
  • 解答:必须有继承或者实现的前提下,类型转换(多态环境下对象造型)
  • 方法:

    • 首先,父类的引用指向子类的对象(向上造型)
      父类的类型 父类引用 = new 子类构造方法;
    • 然后,向下造型
      子类的类型 子类的引用 = (子类类型)父类的引用;
  • instanceof操作符的应用

Arrays类的sort方法补充

在对引用数据类型的数组进行排序时,要求排序所在的类实现Compareable接口,并且重写用来排序的规则方法compareTo方法,根据返回值判断大小,大于0,则前者值大;小于0,后者值大;等于0,一样大。

代码

package com.xzy.abstract_and_interface;
/**
 * 接口
 * @author abi
 *
 */
public interface ShengWu {
    public abstract void birth();
}
package com.xzy.abstract_and_interface;

public class MuDan extends Plant implements ShengWu {

    private String name;

    public MuDan() {
        super();
        // TODO Auto-generated constructor stub
    }

    public MuDan(String name) {
        super();
        this.name = name;
    }

    @Override
    public void birth() {
        System.out.println(name+"发芽");

    }

    @Override
    public void dead() {
        System.out.println(name+"凋谢");

    }

}
package com.xzy.abstract_and_interface;

public class HeHua extends Plant implements ShengWu {

    private String name;

    public HeHua() {
        super();
        // TODO Auto-generated constructor stub
    }

    public HeHua(String name) {
        super();
        this.name = name;
    }

    public void flow() {
        System.out.println(name+"开花");

    }
    @Override
    public void birth() {
        System.out.println(name+"发芽");

    }

    @Override
    public void dead() {
        System.out.println(name+"凋谢");

    }

}
package com.xzy.abstract_and_interface;

public class Student implements Comparable<Student> {

    private String name;
    private double grade;
    private int age;


    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(String name, double grade, int age) {
        super();
        this.name = name;
        this.grade = grade;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }

    @Override
    public int compareTo(Student s) {
        if (this.getAge()>s.getAge()) {
            return 1;
        }else if(this.getAge()<s.getAge()){
            return -1;
        }
        return 0;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", grade=" + grade + ", age=" + age + "]";
    }




}
package com.xzy.abstract_and_interface;

import java.util.Arrays;

public class Test {

    //instanceof 实例
    public static void getInstances(ShengWu sw) {
        if(sw instanceof HeHua) {
            HeHua hh = new HeHua("荷花");
            hh.flow();
        }else if(sw instanceof MuDan) {
            MuDan md = new MuDan("牡丹");
            md.dead();
        }
    }
    public static void main(String[] args) {
        //Arrays类sort方法
        Student[] stu =new Student[]{new Student("张三",96,19),new Student("李四",100,20),new Student("王二",64,23)};
        Arrays.sort(stu);
        System.out.println(Arrays.toString(stu));

        ShengWu sw1 = new HeHua("荷花");//向上造型
        ShengWu sw2 = new MuDan("牡丹");//向上造型
        getInstances(sw1);
        sw1.birth();
        sw2.birth();
        //sw1.dead();

        HeHua he = (HeHua)sw1;//向下造型

        he.flow();










    }

}

猜你喜欢

转载自blog.csdn.net/qq_40893056/article/details/80798693
今日推荐