封装:封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。该逻辑单元负责将所描述的属性隐藏起来,外界对客体内部属性的所有访问只能通过提供的用户接口实现。这样做既可以实现对客体属性的保护作用,又可以提高软件系统的可维护性。只要用户接口不改变,任何封装体内部的改变都不会对软件系统的其他部分造成影响。
继承:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
多态:多态的基础是继承。多态下,子类重写父类的方法,实际使用过程中,用父类引用变量指向子类对象,此时父类引用调用的是子类重写后的方法,由于是父类引用变量,所有无法调用子类特有的方法。如果想调用子类特有的方法,必须强制类型转换到子类。
class Person { public void speak() { System.out.println("person"); } } class Chinese extends Person { @Override public void speak() { System.out.println("Chinese"); } public void chinaNo1() { System.out.println("chinaNo1"); } } class English extends Person { @Override public void speak() { System.out.println("English"); } } public class SimpleFactory { public static void main(String args[]) { Person person1 = new Chinese(); Person person2 = new English(); person1.speak(); person2.speak(); //person1.chinaNo1(); 多态下父类引用变量无法直接调用子类特有的方法 Chinese chinese = (Chinese) person1; chinese.chinaNo1(); } }
import java.util.Scanner; class Operation { private double numberOne = 0; private double numberTwo = 0; public double getNumberOne() { return numberOne; } public void setNumberOne(double numberOne) { this.numberOne = numberOne; } public double getNumberTwo() { return numberTwo; } public void setNumberTwo(double numberTwo) { this.numberTwo = numberTwo; } public double getResult() throws Exception { double result = 0; return result; } } class OperationAdd extends Operation { @Override public double getResult() { return getNumberOne() + getNumberTwo(); } } class OperationSub extends Operation { @Override public double getResult() { return getNumberOne() - getNumberTwo(); } } class OperationMul extends Operation { @Override public double getResult() { return getNumberOne() * getNumberTwo(); } } class OperationDiv extends Operation { @Override public double getResult() throws Exception { if (getNumberTwo() == 0) { throw new Exception("除数不能为0"); } return getNumberOne() / getNumberTwo(); } } class OperationFactory { public static Operation createOperation(char operation) throws Exception { switch (operation) { case ‘+‘: { return new OperationAdd(); } case ‘-‘: { return new OperationSub(); } case ‘*‘: { return new OperationMul(); } case ‘/‘: { return new OperationDiv(); } default: { throw new Exception("不支持的计算类型"); } } } } public class SimpleFactory { public static void main(String args[]) { Scanner sc = new Scanner(System.in); double number1 = sc.nextDouble(); System.out.println(number1); char op = sc.next().charAt(0); System.out.println(op); double number2 = sc.nextDouble(); System.out.println(number2); Operation operation = null; try { operation = OperationFactory.createOperation(op); } catch (Exception e) { e.printStackTrace(); } operation.setNumberOne(number1); operation.setNumberTwo(number2); try { System.out.println(operation.getResult()); } catch (Exception e) { e.printStackTrace(); } } }
原文:https://www.cnblogs.com/yfzhou/p/9976001.html