版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/83020367
前言
本章学习面向对象的第三个特征,多态。包括转型和final,以及数组的基本知识。
范例
1.多态的概念
多态,我们从字面上理解,那就是多种形态,意味着一个对象有可能有多种形态,为什么呢?现实世界中,人是一个大的概念,而人又包含工人、学生、公务员等等,他们都是人,但是又是不同的职业,有着不一样的行为,这就是多态。当然,对应到java类中就表示对于父类的一个方法,子类们可能有多种不同的实现方式。
多态的存在条件:
- 继承
- 方法重写
- 父类引用指向子类对象
多态的基本结构如下实例,此时的dog变量将调用Dog类的call方法。
package com.jwang.test;
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
dog.call();
}
}
class Animal{
public void call(){
System.out.println("叫了一声!");
}
}
class Cat extends Animal{
@Override
public void call(){
System.out.println("喵喵喵!");
}
}
class Dog extends Animal{
@Override
public void call(){
System.out.println("汪汪汪!");
}
}
2.对象的转型
父类引用指向子类对象,我们称之为向上转型。它属于自动类型转换。
将父类对象转为子类对象,我们称之为向下转型(强制转型,前提是要有向上转型)。
作用:
- 向上转型只能调用子类重写的方法以及父类独有的方法,无法调用子类拥有的其他方法
- 向下转型则是转而既可以调用父类独有方法,也可以调用子类的独有方法
package com.jwang.test;
public class Test {
public static void main(String[] args) {
Animal dog1 = new Dog();//向上转型
dog1.aa();
//dog1.bb();//这是错误的,无法调用
Dog dog2 = (Dog) dog1;//向下转型
dog2.bb();//这是正确的
}
}
class Animal{
public void call(){
System.out.println("叫了一声!");
}
public void aa(){
System.out.println("父类独有方法");
}
}
class Dog extends Animal{
@Override
public void call(){
System.out.println("汪汪汪!");
}
public void bb(){
System.out.println("子类独有方法!");
}
}
3.final关键字
作用:
扫描二维码关注公众号,回复:
3663764 查看本文章
- 修饰变量:被它修饰的变量不可改变,一旦赋了初始值,将无法更改(一般修饰为静态常量)
public static final String PI = "3.1415";
- 修饰方法:该方法不可以被子类重写,但可以重载
public final void study(){}
- 修饰类:修饰的类不能被继承
final class A{}
4.数组的概念
数组是相同数据类型的有序集合,其中每个数据我们称之为一个元素,每个元素可以通过一个索引(下标)来访问。
数组的三大基本特点:
- 长度是确定的。数组一旦被创建,它的大小就是不可以被改变的
- 其元素必须是相同的类型,不允许混合类型
- 数组类型可以是任何数据类型,包括基本数据类型和引用数据类型
(1)数组的声明(一维数组举例,二维数组我的项目中基本没有)
语法:数据类型 [] 数组名 / 数据类型 数组名 []
int [] arrys01;
String arrys02 [];
(2)数组的初始化
注意:数组的下标范围是【0~数组长度-1】
- 静态初始化
int [] arrys01 = {1,2,3};
String arrys02 [] = {"aa","bb","cc"};
- 动态初始化
int [] arrys01 = new int[3];
arrys01[0]=10;
arrys01[1]=20;
arrys01[2]=30;
String arrys02 [] = new String[4] ;
arrys02[0]="aa";
arrys02[1]="bb";
arrys02[2]="cc";
arrys02[3]="dd";
- 默认初始化
//一下方式将进行默认初始化,初始化规则与成员变量初始化规则相同
int [] arrys01 = new int[3];//0,0,0
String arrys02 [] = new String[4] ;//null,null,null,null
(3)数组的遍历
- 通过for循环实现(数组有一个长度的属性,命名为:数组名.length)
int [] arrys01 = {1,2,3};
for (int i = 0; i < arrys01.length; i++) {
System.out.println(arrys01[i]);
}
- 通过foreach实现(该项为jdk1.5引入的新特性)
int [] arrys01 = {1,2,3};
for (int i : arrys01) {
System.out.println(i);
}
多维数组的概念及用法我在这里暂时不过多去讨论,有余力再更新相关的内容,其实是博主写累了,码字不容易啊。