Java知识点梳理——多态
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),这种机制就称为虚方法调用。
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("您好");
}
}
Java知识点梳理——多态的更多相关文章
- java知识点梳理
网络搜索结果,出处不详,仅供参考 对于刚刚接触Java的人,java基础知识技术点繁多,那么gkstk小编为大家汇总最全java知识点如下,仅供大家参考学习! 1. JVM相关(包括了各个版本的特性) ...
- Java知识点梳理——集合
1.定义:Java集合类存放于java.util包,是存放对象的容器,长度可变,只能存放对象,可以存放不同的数据类型: 2.常用集合接口: a.Collection接口:最基本的集合接口,存储不唯一, ...
- Java知识点梳理——装箱和拆箱
1.前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法:Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换 ...
- Java知识点梳理——继承
1.定义:继承允许创建分等级层次的类,就是子类继承父类的特征行为,使得子类对象具有父类实例的方法, 使得子类具有父类相同的行为. 2.继承的特性: a.子类拥有父类非priavte的属性.方法: ...
- Java知识点梳理——抽象类和接口
抽象类 1.定义:没有包含足够的信息来描绘一个具体对象的类,不能被实例化,必须被继承: 2.abstract关键字:abstract class定义抽象类,普通类的其它功能依然存在,如变量.方法等: ...
- Java知识点梳理——读写分离
1.读写分离:可以通过Spring提供的AbstractRoutingDataSource类,重写determineCurrentLookupKey方法,实现动态切换数据源的功能:读写分离可以有效减轻 ...
- Java知识点梳理——常用方法总结
1.查找字符串最后一次出现的位置 String str = "my name is zzw"; int lastIndex = str.lastIndexOf("zzw& ...
- Java知识点梳理——泛型
1.定义:泛型的本质是参数化类型,就是将类型由原来的具体的类型参数化,这种参数类型可以用在类.接口.方法中,分别称为泛型类.泛型接口.泛型方法: 2.泛型类:泛型类的声明和非泛型类的声明类似,除了在类 ...
- java 知识点梳理
1.ArrayList与linkedList 区别 ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦; 优点是查找比较快. Lin ...
随机推荐
- JConsole的使用手册 JDK1.5(转)
一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大 ...
- SICP 1.23-1.26体会
1.23 代码修改非常easy, 关键是时间. 电脑上算了一下. 100000000下面全是0. 開始还以为代码写错了. 最后没办法, 用1e10 1e11来计算. 发现比 1e11 1e12快1.2 ...
- Powershell - 获取OS版本信息和catpion信息
Environment 获取 OSversion: $OSVersion = [System.Environment]::OSVersion.Version WMI获取Caption: $OSCap ...
- PHPExcel 对xls表格的文件读取
//先去http://phpexcel.codeplex.com/releases/view/119187 下载文件包最后解压Classes到当前目录header("Content-type ...
- maven介绍 极客学院
来自极客学院 Apache Maven 是一套软件工程管理和整合工具.基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建.报告和文档. Maven - 概述 M ...
- Wpf 自定义控件(1)
1. 新建一个wpf工程,在工程下面新建 一个文件夹themes,在themes下新建两个资源字典文件generic.xaml和PrettySeekBar.xaml generic.xaml ...
- 转:python之如何在某文件中调用其他文件内的函数
假设名为A.py的文件需要调用B.py文件内的C(x,y)函数 情形1:在同一目录下, (1) import B if __name__ == "__main__": B.C(x, ...
- 斑马Zebra ZPLII指令集中文说明解释
我们最常用的斑马(Zebra)条码打印机,应用ZPLII命令来控制打印,说明书中有每条指令的详细说明及相关示例,下面是各指令的中文释义: ^A 对Zebra内置点阵字体缩放 ^A(可缩放/点阵字体 ...
- redis命令_ZINCRBY
ZINCRBY key increment member 为有序集 key 的成员 member 的 score 值加上增量 increment . 可以通过传递一个负数值 increment ,让 ...
- matplotlib极坐标系应用之雷达图
#!/usr/bin/env python3 #-*- coding:utf-8 -*- ############################ #File Name: test.py #Autho ...