面向对象编程有三大特征:封装、继承和多态
访问修饰符可以控制属性的访问范围
public:表示公共访问级别,可以被任何类访问。
protected:表示受保护访问级别,可以被类本身、子类和同一包中的类访问。
default(缺省):表示默认访问级别,即如果没有使用访问修饰符,默认是此级别,可以被同一包中的类访问。
private:表示私有访问级别,只能在类内部访问。
修饰符 | 类 | 包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
多态介绍
方法或对象具有多种形态,多态是建立在封装和继承基础之上的。
换句话说,多态可以理解为事物的多种形态,同一个行为具有不同的表现形式或形态的能力。
例如:打印机分为黑白打印机和彩色打印机,在黑白打印机情况下打出来为黑白,在彩色打印机情况下打印出来为彩色
1. 方法的多态(方法的重载和重写)
public class PolyMethod { public static void main(String[] args) { A a = new A(); B b = new B(); //1.方法的重载体现多态 //这里我们传入不同的参数,就会调用不同的sum方法 System.out.println(b.sum(10,20)); //30 System.out.println(b.sum(10,20,30)); //60 //2.方法的重写体现多态 a.say(); //父类A的say方法被调用 b.say(); //子类B的say方法被调用 } } class A { public void say(){ System.out.println("父类A的say方法被调用"); } } class B extends A { //方法重载 public int sum(int n1, int n2){ return n1 + n2; } public int sum(int n1, int n2, int n3){ return n1 + n2 + n3; } //方法重写 public void say(){ System.out.println("子类B的say方法被调用"); } }
2. 对象的多态
1) 一个对象的编译类型和运行类型可以不一致
2) 编译类型在定义对象时,就确定了,不能改变
3) 运行类型是可以变化的
4) 编译类型是看定义时 “=” 等号的左边,运行类型是看 “=” 等号的右边
public class PolyMethod { public static void main(String[] args) { //对象的多态 //1.animal的编译类型是 Animal,animal的运行类型是 Dog Animal animal = new Dog(); //当代码执行到当前行时,animal的运行类型时Dog,所以cry方法是Dog类cry方法 animal.cry(); //Dog cry 小狗汪汪叫... //2.此时,animal的运行类型是 Cat,但编译类型仍然是 Animal animal = new Cat(); //当代码执行到当前行时,animal的运行类型时Cat,所以cry方法是Cat类cry方法 animal.cry(); //Cat cry 小猫喵喵叫... } } class Animal{ public void cry(){ System.out.println("Animal cry 一直在叫..."); } } class Cat extends Animal{ @Override public void cry(){ System.out.println("Cat cry 小猫喵喵叫..."); } } class Dog extends Animal{ @Override public void cry(){ System.out.println("Dog cry 小狗汪汪叫..."); } }
标签:20,面向对象编程,void,cry,多态,say,animal,public From: https://www.cnblogs.com/REN-Murphy/p/17641165.html