我是靠谱客的博主 独特雨,最近开发中收集的这篇文章主要介绍java中的继承 多态详解java中最重要的是抽象、继承、多态、封装,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

java中最重要的是抽象、继承、多态、封装

其中最难的就是多态,因为多态包含了继承,方法重写等知识

1、多态的定义:多态是面向对象的重要特性,表示同一个符号在不同的语义环境下有不同的解释,简单的说:“一个接口,多种实现“。
2、多态的分类: 具体类多态(一般不用) 、 抽象类多态(常用) 、 接口多态(最常用)
3、多态的三要素: 继承、重写、父类引用指向子类对象。

从三要素中知道多态要用到继承:

子类继承父类的特征和行为,使得子类具有父类的属性和方法。
特点:在继承关系中,父类更通用,子类更具体。父类具有一般的属性和行为,子类具有特殊的属性和行为。
在继承关系中,子类和父类要满足is-a关系,子类是父类的一个特例实现。
继承的好处:继承可以实现代码的复用,避免重复代码的出现。
继承的实现:
在java中,用extends(扩展)关键字来表示一个类继承另一个类。
在父类中只定义通用的属性和方法,子类自动继承父类的属性和方法,子类中定义自己特有的属性和方法,或子类重新定义 父类的属性,重写父类的方法可以获得与父类不同的功能实现。
举个例子看一下:
public class Father extends GrandFather{
	public Father(){
		super();  //注意》默认情况,系统会自动加入super(),表示调用父类的默认构造方法
		System.out.println("父类的构造方法");
	}
	
	public static void main(String[] args){
		//this();
		Son s = new Son();
		
	}
}

class Son extends Father{
	public Son(){	//当子类调用构造方法时,先调用父类的构造方法
		super();  //注意》默认情况,系统会自动加入super(),表示调用父类的默认构造方法
		System.out.println("子类的构造方法");
	}
}

class GrandFather{
	public GrandFather(int h){
		System.out.println("h:" + h);
	}

	public GrandFather(){
		super();  //注意》默认情况,系统会自动加入super(),表示调用父类的默认构造方法
		System.out.println("爷爷的构造方法");
	}
}
这段代码执行后的结果是:
爷爷的构造方法
父类的构造方法
子类的构造方法

由此可以看出:当通过new关键字创建子类对象时,不仅调用了父类的构造方法还调用了父类的父类的构造方法,这是因为当通过 new关键字创建子类对象时,如果不通过super关键字显示的调用父类的构造方法,虚拟机会自动添加super();来调用父类的构造方法,以此类推一直调用到Object类的构造方法。
下面通过内存图分析说明:


通过上图可以清楚看到继承关系中继承关系中的执行顺序;
当代码执行时先将class文件加载到方法区中,再将方法加载到方法区,执行main()方法,创建一个son对象,在栈区有一个 S s 指向堆中的new Son,
 在执行构造方法时先执行父类的构造方法,父类的构造方法执行完后执行自己的构造方法。执行自己的构造方法时,先创建属性并初始化(类型的初始化),再赋你给出的值,如果后面还有赋值再继续,之后向下执行。

多态关系中的方法重写:

如果在子类中定义的一个方法,其名称,返回值类型和参数列表与父类中的方法相同,那么说子类的方法重写了父类的方法。
方法的重写要与方法的重载区别开来:
方法重写:两个方法存在于不同的类中(父类和子类),方法名相同、参数列表也相同,返回类型相同,子类方法的访问权限要大于父类的访问权限。
方法重载:两个方法存在于同一个类中,方法名相同、参数列表也相同,返回类型可以相同也可以不同。

看下面这个例子:
public class Father{
	protected void show(){
		System.out.println("父类的方法");
	}
	
	private double makeMoney(){
		System.out.println("种田");
		return 1.0;
	}
}

public class Son extends Father{
	public void show(){
		System.out.println("子类的方法");
	}
	
	//子类方法的访问权限可以大于等于父类方法的返回权限
	public int makeMoney(){  //子类方法的返回值类型, 方法名,参数列表必须与父类相同.
		System.out.println("互联网+");
		return 1;
	}
}

public class A{
	public static void main(String[] args){
		Father f= new Father();//创建的实例是父类的对象
		f.show();		
		
		Son s = new Son();//创建的实例是子类的对象
		s.show();
		
		Father father  = new Son();  //隐式类型转换  ->父类的引用指向子类对象
		fathe.makeMoney(); //调用子类的方法  new的是谁就是谁的对象
	}
}
这段代码的执行结果是:
父类的方法
子类的方法
互联网+

多态:

多态的特性是表现出多种形态,具有多种实现方式。就是同一个接口,使用不同的实例而执行不同的操作。
多态的好处:可以增强程序的可扩展性及可维护性,使代码更加简洁。
多态的实现:一般的做法是写一个方法






最后

以上就是独特雨为你收集整理的java中的继承 多态详解java中最重要的是抽象、继承、多态、封装的全部内容,希望文章能够帮你解决java中的继承 多态详解java中最重要的是抽象、继承、多态、封装所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部