首页 > 其他分享 >继承和多态

继承和多态

时间:2024-08-05 21:38:59浏览次数:9  
标签:name 继承 子类 void 多态 attack 父类 public

继承

继承:

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例 域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

生活中的继承:

继承的概述:

  • 继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出子类,进而构造出更为复杂的子类。
  • 子类既有新定义的行为特征,又继承了原有类的行为特征。
  • 父类与子类存在着包含与被包含的关系,是一种is-a的关系。
  • 在Java中继承可以在现有类的基础上进行功能的扩展,这样能够更加快速地开发出新类,使新类不仅可以复用当前类的特征和行为而且还可以定义自己的特征和行为。
  • 通过继承可大幅度提高代码的复用性,减少代码量,便于程序的后期维护。

*Java继承语法:*

[修饰符] class 子类名  extends 父类名{



  //类定义部分



}

父类也称为基类或超类

继承的实现:

*示例:*定义父类武器,以及子类圣剑和长矛

public class Weapon { //父类  武器
	String name;//武器名
	int attackValue;//攻击值

    	//构造方法
    public Weapon(String name, int attackValue) {
        System.out.println("--执行武器父类Weapon的构造方法--");
    	this.name = name;
    	this.attackValue = attackValue;
    }
    //攻击方法
    public void attack(){
    	System.out.println("武器名:"+name+"\t"+"攻击
    		值:"+attackValue);
    }

}
public class Sword extends Weapon{ //圣剑  子类
	public Sword(String name, int attackValue) {
		super(name, attackValue);
	}
}
public class Spear extends Weapon{ //圣剑  长矛
	//构造方法
	public Spear(String name,int attackValue) {
		super(name, attackValue);
	}
}
public class ExtendsTest { // 测试类
 	public static void main(String[] args){
 		Sword word = new Sword("圣剑",300);
 		word.attack();
 		Spear spear = new Spear("长矛",250);
 		spear.attack();
 	}
}

多态

多态:

从一定角度来看,封装和继承几乎都是为多态而准备的。

多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

在编译时,可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。

多态的应用:

示例:指向子类的父类引用在执行重写方法时所体现的多态性

//父类 人物
public class Figure {
	protected String name;
	public void attack(){
		//此处不进行具体的攻击操作,不同职业的英雄攻击方式不同
	}
	public  void run(){		
		System.out.println("在奔跑");
	}
}

//子类 战士
public class Warrior  extends  Figure{
	//重写父类的attack()方法
	public void attack(){
	            System.out.println(this.name+"正在物理攻击......");
	}
}
//子类 法师
public class Master extends Figure {
	//重写父类的attack()方法
	public void attack(){		
		System.out.println(this.name+"正在魔法攻击......");
	}	
	public static void main(String[] args) {
	     Figure master=new Master();
	     master.name="恶魔巫师";
	     Figure warrior=new Warrior();
	     warrior.name="撼地神牛";
	     master.attack();
	     warrior.attack();
	}
}

img

引用变量的强制类型转换:

示例:调用父类引用的方法没有在父类进行定义

//子类 法师
public class Master extends Figure {
	//重写父类的attack()方法
	public void attack(){		
	            System.out.println(this.name+"正在魔法攻击......");
	}
	//子类特有的轰炸功能
	public void bomb(){
	            System.out.println(this.name+“正在魔法轰炸......");
	}	
	public static void main(String[] args) {
	     Figure figure=new Master();
	     figure.name="恶魔巫师";
                       figure.attack();
	     figure.bomb(); //此处编译出错
	}
}

分析:

引用变量只能调用其编译时类型的方法,而不能调用运行时类型的方法,即 使实际所引用的对象确实包含该方法。

如果需要让引用变量调用运行时类型的方法,则必须将其强制类型转换为运 行时类型,强制类型转换需借助于类型转换运算符。

instance of 运算符

*instance of* 运算符用于判断一个实例是否为某个类的实例

语法:

a instanceof A

判断实例a是否为类A的实例,如果为真则返回true,否则返回false。

//子类 法师
public class Master extends Figure {
	//重写父类的attack()方法
	public void attack(){		
	            System.out.println(this.name+"正在魔法攻击......");
	}
	//子类特有的轰炸功能
	public void bomb(){
	            System.out.println(this.name+“正在魔法轰炸......");
	}	
	public static void mafigurein(String[] args) {
	     Figure figure=new Master();
	     figure.name="恶魔巫师";
                       figure.attack();
                       if(figure instanceof Master )
	      	Master master = (Master)figure; // 使用向下类型转换
	      master.bomb();   //成功调用Master类的bomb
	}
}

总结:
声明包的语句是“package 包名”,该语句必须放在第一行,导入类的语句是 “import 包名.类名”。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例 域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
子类继承父类的语法是:“[修饰符] class 子类名 extends 父类名”。
重载就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
重写就是在子类方法重写父类方法,重写的方法和被重写的方法必须具有相同方法名称、参数
列表和返回类型。
多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
在编译时,可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。

标签:name,继承,子类,void,多态,attack,父类,public
From: https://www.cnblogs.com/chenlei210162701002/p/18344114

相关文章

  • 多态的可扩展性动物行为实例 day09
    packagecom.shujia.day09;importjava.nio.channels.Pipe;/*多态的好处1、提高了程序的维护性(由继承保证)2、提高了程序的扩展性(由多态保证)*/classAnimal{Stringname;intage;publicAnimal(){}publicAnimal(S......
  • 多态的转型,向下转型day09
    多态访问成员方法的弊端:多态的形式下,无法调用子类中特有的方法。解决方案:向下转型。语句定义格式:子类的类型对象名=(子类的类型)父类的变量;向下转型的理解曹操和曹植的故事,曹操是曹植的父亲,曹植是曹操的儿子class曹操{publicvoi......
  • 多态的概念,前提,注意事项以及访问成员的特点 day09
    多态:某一个事物在不同状态下的多种状态举例:1、学生是人,老师是人,医生是人。2、汽态的水是水,固态的水是水,液态的水是水在java中要实现多态的话,需要有3个前提:1、必须要有继承关系2、要有方法的重写(思考可否不重写?)......
  • 多态
    多态1.多态的概念多态是方法或对象具有多种形态,是面向对象的第三大特征。多态的前提是两个对象(类)存在继承关系,多态是建立在封装和继承基础之上的。2.为什么要使用多态代码重用和扩展性:多态性使得我们可以编写通用的代码,可以适用于各种不同类型的对象。通过抽象类和接口,......
  • 继承
    继承1.何为继承继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。继承是指在原有类的基础上,进行功能扩展,创建新的类型。继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。JAVA中类只有单继承,没有多继承!继......
  • CSS学习:继承、权重关系、伪类选择器、媒体查询
    1、具有继承性质的样式(可以被子元素继承)color文字颜色 ;font-family字体族;font-size字体大小; font-weight字体粗细;line-height行高;text-align文本对齐方式;visibility可见性;cursor鼠标指针样式。2、不具有继承性质的样式(不能被子元素继承)background-color背景颜色;border......
  • 继承与成员变量以及构造方法的关系day08
    继承与成员变量的关系:1、怎么寻找?子类方法中使用变量的规则是:(就近原则)1)先在方法内部寻找,若找到就直接使用2)方法内部找不到,去当前类的成员变量的位置上寻找,若找到就直接使用3)若当前类的成员变量的......
  • 继承的特点注意事项以及类的初始化顺序和加载顺序day08
    继承的好处提高了代码的复用性多个类相同的成员可以放到同一个类中提高了代码的维护性如果功能的代码需要修改,修改一处即可让类与类之间产生了关系,是多态的前提其实这也是继承的一个弊端:类的耦合性很强......
  • 继承和成员方法的关系,重载和重写day08
    /*继承和成员方法的关系1、寻找规则:现在本类中寻找,若找到就使用;若本类中没有对应方法,就使用继承自父类中的方法,如果还是没有,就报错。2、java中所有的类都有一个共同的父类:Object3、如果子类中的方法的返回值类型,方法名,参数列表都与父类中一样,这样......
  • 多态,抽象,接口,Object,Equals
    1.多态1.1编译时多态:在编译时就能够确定调用哪个方法​方法重载是编译时多态,在编译期根据参数的数据类型,个数以及次序来确定调用方法1.2运行时多态:只有在运行时才能确定调用哪个方法,主要指动态绑定来实现,动态绑定是程序运行时确定调用哪个方法的过程,他依赖于对......