继承与多态

Posted 二十的十七

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承与多态相关的知识,希望对你有一定的参考价值。

第三章:继承与多态知识梳理

面向对象具有三大特性:封装、继承、多态
本章的内容:学习Java中包的概念以及另外两大特征:继承和多态。

1.包的定义与使用

(1)Java中通过包来完成对类的管理,每个类都该存放在相应的包里。
(2)Java中的包其实就是文件夹的概念,用来管理Java的源代码文件的。

下面我们一起来看看Java中包如何创建与使用:

package com.game.dota;

public class Hero {

}

package com.game.test;

import java.util.Scanner;

import com.game.dota.Hero;

public class Mytest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Hero h=new Hero();
        Scanner sc=new Scanner(System.in);
        
	}

}

总结:不同包之间的类使用时,需要使用import导入对应的包才能使用,而相同包下则可以直接识别。打包的快捷键是Ctrl+Shift+O。

2.继承的概念与使用
知识要点:继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出子类,进而构造出更为复杂的子类,子类既有新定义的子类特征,又继承了原有类的行为特征。

下面我们来看看Java中怎么实现继承以及继承中的关于子类父类的操作:

package com.test;

public class Spear extends Weapon{
	
	public Spear(String name,int attackValue) {
		super(name, attackValue);
	}
	
}
package com.test;

public class Sword extends Weapon{

public Sword(String name,int attackValue) {
	super(name, attackValue);
}

}
package com.test;

public class Weapon {
	String name;
	int attackValue;
	public Weapon(String name,int attackValue) {
		this.name=name;
		this.attackValue=attackValue;
	}
	public void attck() {
		System.out.println("武器名:"+this.name+"\\t攻击值:"+this.attackValue);
	}
}

package com.test1;

import com.test.Spear;
import com.test.Sword;

public class MyTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Sword sw=new Sword("圣剑", 200);
        sw.attck();
        Spear sp=new Spear("长矛", 300);
        sp.attck();
        		
        		
	}

}




总结:继承可以提高代码的复用性,减少相同代码的编码量。

3.Java中的多态
(1)多态从字面意思上解释其实就是一个事物的多种形态,比如生活中的水,在常温下是液体,在高温下是气体,在低温下是固体,Java中的方法,对象也有多态的体现。
(2)多态的两种体现:方法重载和方法重写

多态的定义与使用:

package com.game.test;


public class Mytest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        System.out.println(1234);
        System.out.println("字符串");
        System.out.println(true);
	}

}

注释:同一个调用,执行的功能不同。这就是多态的体现

package com.test;

public class Figure {
public String name;
public void attack() {
	
}
public void run() {
	System.out.println("英雄在奔跑");
}
}
package com.test;

public class Master extends Figure{
public void attack() {
	System.out.println(this.name+"正在进行魔法攻击");
}
}
package com.test;

public class Warrior extends Figure{
public void attack() {
	System.out.println(this.name+"正在进行物理攻击");
}
}
package com.test;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 Figure f1=new Warrior();
       f1.name="德玛西亚";
       f1.attack();
       Figure f2=new Warrior();
       f2.name="诡术妖姬";
       f2.attack();
	}

}





注释:以上是关于重写方法的案例。

4.Java中的重载和重写
方法的重载是指在同一个类中同名不同参的方法,就是方法的名称相同,但是参数的个数和类型它不一样,这种就形成了一个重载,好,下面我们来一个例子的演示:

package com.test;

public class Book {
public float getPrice() {
	return 100;
	
}
public float getPrice(int page) {
	return (float)(page*0.1);
}
public float getPrice(int page,float discount) {
	return (float)(page*discount);
}
}
package com.test;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book bk=new Book();
		System.out.println("默认的价格是:"+bk.getPrice());
		System.out.println("按图书页数计算价格是:"+bk.getPrice(600));
		System.out.println("按图书页数和折扣计算价格是:"+bk.getPrice(600, 0.9f));
		
	}

}



小节:多态的目的就是提升整个项目设计上的灵活性和扩展性,是面向对象中非常重要的特征之一。重载关注的是同一个类中,方法名相同,参数不同的方法,调用的时候虽然方法名相同,但是根据参数进行区分,从而执行不同的方法体。而重写是发生在父类与子类中,子类对父类的方法重新实现,要求方法的返回值,方法名,方法参数都要相同,重写的方法访问修饰符要大于等于父类的方法的访问修饰符。

以上是关于继承与多态的主要内容,如果未能解决你的问题,请参考以下文章

继承与多态

05继承与多态

多态与继承

继承与多态

多继承续篇与多态

继承与多态