8.抽象类、接口和多态.md

1.抽象类

1.抽象类

//抽象父类
public abstract class Shape {
    {
        System.out.println("1.开始抽象类的初始化");
    }
     
    private String color;
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
     
    //定义抽象方法,子类实现
    public abstract String getType();
    //定义抽象方法,子类实现
    public abstract double calPerimeter();
     
    //无参构造
    private Shape(){
        System.out.println("2.无参初始化");
    }
    //有参构造
    public Shape(String color){
        this.color = color;
        System.out.println("2.有参初始化");
    }
}
//子类继承抽象父类
public class Triangle extends Shape {
    private double a;
     
    public double getA() {
        return a;
    }
 
    public void setA(double a) {
        this.a = a;
    }
     
    public Triangle(String color, double a){
        super(color);
        this.a  = a;
        System.out.println("3.有颜色的三角形");
    }
     
    @Override
    public String getType() {
        // TODO Auto-generated method stub
        //重写的抽象方法
        return "无颜色三角形";
    }
 
    @Override
    public double calPerimeter() {
        // TODO Auto-generated method stub
        //重写的抽象方法
        return 2.0;
    }
}
public class Study {
    public static void main(String[] args) {
        Shape tColor = new Triangle("Bule", 3.0);
                 
        System.out.println(tColor.getType());
        System.out.println(String.valueOf(tColor.calPerimeter()));     
    }//main
}



2.接口和抽象类的关系

2.1实现上的区别:

通用的功能应该用抽象类和继承来实现,个别的功能应该用接口来实现

22.类和接口的关系:

* 非抽象类实现接口时候,必须实现接口方法

* 抽象类实现接口时候,不必须实现接口方法

2.3.Java为什么只能单继承可以多实现:

* 如果一个类继承了多个类,那么多个类存在同名方法,此时子类必须实现父类方法,造成混乱。
* 而多实现中,类即使实现了多个接口的同名方法,在实例化时候使用的还是自己从接口override的方法

2.4.接口和接口的关系:

一个接口是可以继承多个接口的


3.多态

多态的应用:

  • 用于形参时候,能够接收更多类型参数
  • 用于返回类型时候,能够返回更多类型参数

多态的注意点:

  • 多态下,子类调用成员变量,访问的是父类的成员变量
  • 多态下,不能调用子类的方法,如果要使用,则需要强制转换,强制转换之前要用instance of判断是否可以强转
public void Fun(SuperClass clazz){
    if(clazz instanceof SubClass){
        clazz.SubFun
    }
} 
//抽象父类
public abstract class Shape {
    {
        System.out.println("1.开始抽象类的初始化");
    }
     
    private String color;
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
     
    //定义抽象方法,子类实现
    public abstract String getType();
    //定义抽象方法,子类实现
    public abstract double calPerimeter();
     
    //无参构造
    private Shape(){
        System.out.println("2.无参初始化");
    }
    //有参构造
    public Shape(String color){
        this.color = color;
        System.out.println("2.有参初始化");
    }
}
//子类继承抽象父类
public class Triangle extends Shape {
    private double a;
     
    public double getA() {
        return a;
    }
 
    public void setA(double a) {
        this.a = a;
    }
     
    public Triangle(String color, double a){
        super(color);
        this.a  = a;
        System.out.println("3.有颜色的三角形");
    }
     
    @Override
    public String getType() {
        // TODO Auto-generated method stub
        //重写的抽象方法
        return "无颜色三角形";
    }
 
    @Override
    public double calPerimeter() {
        // TODO Auto-generated method stub
        //重写的抽象方法
        return 2.0;
    }
}
public class Study {
    public static void main(String[] args) {
        Shape tColor = new Triangle("Bule", 3.0);
                 
        System.out.println(tColor.getType());
        System.out.println(String.valueOf(tColor.calPerimeter()));     
    }//main
}



2.接口和抽象类的关系

2.1实现上的区别:

通用的功能应该用抽象类和继承来实现,个别的功能应该用接口来实现

22.类和接口的关系:

* 非抽象类实现接口时候,必须实现接口方法

* 抽象类实现接口时候,不必须实现接口方法

2.3.Java为什么只能单继承可以多实现:

* 如果一个类继承了多个类,那么多个类存在同名方法,此时子类必须实现父类方法,造成混乱。
* 而多实现中,类即使实现了多个接口的同名方法,在实例化时候使用的还是自己从接口override的方法

2.4.接口和接口的关系:

一个接口是可以继承多个接口的


3.多态

多态的应用:

  • 用于形参时候,能够接收更多类型参数
  • 用于返回类型时候,能够返回更多类型参数

多态的注意点:

  • 多态下,子类调用成员变量,访问的是父类的成员变量
  • 多态下,不能调用子类的方法,如果要使用,则需要强制转换,强制转换之前要用instance of判断是否可以强转
public void Fun(SuperClass clazz){
    if(clazz instanceof SubClass){
        clazz.SubFun
    }
} 
原文地址:https://www.cnblogs.com/bugstar/p/8492465.html