多态与find关键词

多态:
   多态:
          1要有继承
          2要有重写
          3父类引用指向子类对象
     重载(overLoad)
     重写(overrRitr)
 
 
    重载(overLoad):方法名相同,参数不同
    可以分为:构造器重载和方法重载
    好处:
        1.一种访问接口,多个实现方法
        2.实现多态调用
 
    示例:构造器重载
    public class Pointer{
        int x,y;
        public Pointer(){}
        public Pointer(int x, int y){
            this.x = x;
            this.y = y;
        }       
    }
    示例:方法重载
    public class MyTools{
        public int sum(int x, int y){return x+y;}
        public int sum(int... nums){
            int rs = 0;
            for(int n : nums){
                rs += n;
            }
            return rs;
        }
 
    }
 
    示例:
    class A{
        public void fun(){
 
        }
    }
    class B extends A{
        public void fun(int x){
 
        }
    }
    B b = new B();
    b对象有两种访问方法(重载)
        b.fun()
        b.fun(int)
 
 
    重写(overRide):子类中覆盖父类中同名方法的实现,方法的返回值类型,方法名,参数都一样,子类中方法访问修饰符必须大于等于父类的方法的访问修饰符。
    示例:
    class A{
        public void fun(){
            System.out.println("这是A类中的fun()方法");
        }
        protected void fun2(){
 
        }
    }
    class B extends A{
        public void fun(){
            System.out.println("这是B类中的fun()方法");
        }
 
        protected void fun2(){
 
        }
        或
        public void fun2(){
 
        }   
    }
 
final 最终的 关键字
    修饰符,可以修饰类,属性,方法,不能修饰构造器
    public final class A{//修饰类,终态类:不能作为父类,不能有子类
        int x;
        final int y;//修饰属性:只能赋一次值,不能修改
        public static final int Z=10;//一般用法,表示常量
 
        void fun1(){}
        final void fun2(){}//修饰方法:子类不能重写该方法
    }
    常量:声明常量使用三个修饰符:public static final,常量名全部大写,有别于变量名。
    常量的访问方法:类名.常量名,例如:A.Z
 

 
 
 
final关键字
 

 
    修饰符,可以修饰类,方法,不能修饰属性,构造器
    abstract 与 final不能同时并存
abstract 抽象的 关键字
    public abstract class A{//修饰类:抽象类,不能实例化对象,但可以有构造器.
 
 
        void fun1(){
            //有方法体,有实现
        }
 
        abstract void fun2();
        //修饰方法:抽象方法,不能有代码的实现部
    }
 
 
    抽象类:
抽象方法
abstract
他不实现,不需要用,子类要实现,必须要有子类重写
        1.不能实例化对象,也就是不能new对象
        2.抽象类中可以有具体方法,也可以包含抽象方法。
        3.如果一个类中有抽象方法,这个类必须是抽象类。
        4.抽象类一般作为父类.
 

 
java程序设计四大原则:
    开闭原则:源代码开放,对修改关闭。
    单一职则:业务逻辑与业务实体数据分离。 
    里氏替换:参数能用父类不用子类。
 
v1.0计算器
import java.util.*;
public class Clac{
    public static void main(String[] args){
        Scanner kb = new Scanner(System.in);
        System.out.print("请输入第一个操作数:");
        int num1 = kb.nextInt();
        System.out.print("请输入第二个操作数:");
        int num2 = kb.nextInt();
        System.out.print("请输入第一个运算符:");
        String op = kb.next();
 
        int rs=0;
        if(op.equals("+"))
            rs = num1+num2;
        else if(op.equals("-"))
            rs = num1-num2;
        else if(op.equals("*"))
            rs = num1*num2;
        else if(op.equals("/"))
            rs = num1/num2;
 
        System.out.println("结果是:"+rs);
    }
}
 
v2.0计算器
public class Calculation{
    private int num1, num2;
    private String op;
    //业务实体
    public void setNum1(int num1){
        this.num1 = num1;
    }   
    public void setNum2(int num2){
        this.num2 = num2;
    }   
    public void setOp(String op){
        this.op = op;
    }
 
    //业务逻辑
    public int getRs(){
        if(op.equals("+"))
            return num1+num2;
        else if(op.equals("-"))
            return num1-num2;
        else if(op.equals("*"))
            return num1*num2;
        else if(op.equals("/"))
            return num1/num2;
    }
}
import java.util.*;
public class App{
    public static void main(String[] args){
        Scanner kb = new Scanner(System.in);
        System.out.print("请输入第一个操作数:");
        int num1 = kb.nextInt();
        System.out.print("请输入第二个操作数:");
        int num2 = kb.nextInt();
        System.out.print("请输入第一个运算符:");
        String op = kb.next();
 
        Calculation c = new Calculation();
        c.setNum1(num1);
        c.setNum2(num2);
        c.setOp(op);
 
        System.out.println("结果是:"+c.getRs());
    }
}
 
 
v3.0计算器
public abstract class Calc{
    private int num1, num2,rs;
    private String op;
    public void setNum1(int num1){
        this.num1 = num1;
    }   
    public void setNum2(int num2){
        this.num2 = num2;
    }   
    public void setOp(String op){
        this.op = op;
    }
    public int getRs(){
        return rs;
    }
    public abstract void exec();//计算的抽象方法
}
//加法器
public class Add extends Calc{
    @Override
    public void exec(){
        rs = num1+num2;
    }
}
 
//减法器
public class Diff extends Calc{
    @Override
    public void exec(){
        rs = num1-num2;
    }
}
//乘法
public class Mul extends Calc{
    @Override
    public void exec(){
        rs = num1*num2;
    }
}
...
//计算器的业务逻辑类
public class ClacBo{
    public static Clac getCalc(String op){
        Calc c = null;
        if(op.equals("+"))
            c = new Add();
        else if(op.equals("-"))
            c = new Diff();
        else if(op.equals("*"))
            c = new M();
        //...
 
        return c;
    }
}
 
import java.util.*;
public class App{
    public static void main(String[] args){
        Scanner kb = new Scanner(System.in);
        System.out.print("请输入第一个操作数:");
        int num1 = kb.nextInt();
        System.out.print("请输入第二个操作数:");
        int num2 = kb.nextInt();
        System.out.print("请输入第一个运算符:");
        String op = kb.next();
 
        Calc c = ClacBo.getCalc(op);
 
        c.setNum1(num1);
        c.setNum2(num2);
        c.setOp(op);
        c.exec();
        System.out.println("结果是:"+c.getRs());
    }
 
}
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/zachary7/p/8191434.html