JAVA进阶(五)多态及数组的基本概念

版权声明:程序猴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);
}

多维数组的概念及用法我在这里暂时不过多去讨论,有余力再更新相关的内容,其实是博主写累了,码字不容易啊。

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/83020367