1、定义:多态是同一个行为具有多个不同表现形式或形态的能力,即一个接口不同的实例执行不同的操作;

2、优点:消除类型之间的耦合关系、可替换性、可扩展性、接口性、灵活性、简化性;

3、多态存在的3个必要条件

  a、继承:在多态中必须存在有继承关系的子类和父类;

  b、重写:子类对父类中的某些方法重新定义,在调用这些方法时就会调用子类中的方法;

  c、父类引用指向子类对象(向上转型):需要将子类引用赋给父级对象,才能调用父类和子类的方法;

public class Test {
public static void main(String [] args){
Person pc = new Chinese(); // 父类引用指向子类对象
pc.sayHello(); // 调用Chinese的 sayHello 输出——>您好
Person pa = new American(); // 向上转型
pa.sayHello(); // 输出——>Hello
}
} public abstract class Person {
public void sayHello();
} public class Chinese extends Person {
public void sayHello()
{
System.out.println("您好");
}
} public class American extends Person {
public void sayHello()
{
System.out.println("Hello");
}
}

注:使用多态方式调用方法时,首先检查父类中有没有该方法,没有编译报错,有则会去调用子类的同名方法(重写父类的方法);由于指向子类的父类引用向上转型了,它只能访问父类中拥有的属性和方法,若子类重写了父类的某些方法,在调用该些方法时,必定使用子类中的方法(虚方法调用);
  声明为父类类型的引用变量只能调用父类中的方法,如果此变量实际引用的是子类对象,而子类对象中覆盖(重写)了父类的方法,这时父类对象调用的是子类中的方法(要想调用父类中被重写的方法,则必须使用关键字super),这种机制就称为虚方法调用。

4、多态实现方式:重写、接口抽象类和抽象方法

5、Java封装:通过对类的私有属性设置公共的访问方法(getter和setter方法)实现对其私有属性访问的目的,隐藏了类的具体实现,提高对象数据的安全性,还可以在外部调用不变的情况下自由修改内部实现代码;

public class Person{

    private String name;  // 私有属性只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏

public String getName(){  // 私有属性对外的公共取值方法
return name;
}
​​
public void setName(String name){  // 私有属性对外的公共赋值方法
this.name = name;
}
}

注:public 方法是外部类访问该类成员变量的入口,任何要访问类中私有成员变量的类都要通过这些getter和setter方法;
   this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突;

6、Java重写与重载

  重写:子类对父类允许访问的方法进行重新编写实现,返回值和参数都不能变,即外壳不变,核心重写,重写是子类与父类的一种多态性表现;

  重载:在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同,重载是一个类的多态性表现;

public class Person {
public void sayHello(){
System.out.println("sayHello");
}
// 重载sayHello方法
public void sayHello(String name){
System.out.println(name + "sayHello");
}
} public class Chinese extends Person {
// 重写父级sayHello方法
public void sayHello(){
System.out.println("您好");
}
}

最新文章

  1. AWS Lambda
  2. jquery的ready事件的实现机制浅析
  3. Hichart 资料收集
  4. 【linux命令】grep
  5. javascript实现经纬度与地址的互转
  6. javascript操作Math对象的方法总结
  7. Cross Site Request Forgery (CSRF)--spring security -转
  8. stl::search
  9. NopCommerce架构分析之参考资料
  10. 用expect做自动应答脚本
  11. ubuntu desktop 开机 连接网络
  12. ceph增加osd流程
  13. 大白痴学习webmagic
  14. 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障
  15. 3.RNN推导
  16. 关于SQL2008R2连接服务器出错问题
  17. IDEA部署项目和多余的项目删掉的演示
  18. 【读书笔记】iOS-动态类型和动态绑定
  19. 《Linux内核分析》实践3
  20. vmware错误汇总

热门文章

  1. struts action不在是一个单例类
  2. jqgrid 加按钮列
  3. android:imeOptions属性
  4. 阻塞IO、非阻塞IO的区别
  5. C++的泛型编程方式
  6. c# 读取文件流
  7. python打包exe文件-ImportError: No module named 'queue'
  8. PowerShell---Operators 介绍
  9. 微信模板消息php
  10. php-fig组织fig-standards的一些标准