面向对象(继承,重写,重载)

在说继承之间,我们先脱离代码,来分析一下现实世界。大家不要惊慌我们分析的并不是什么多高大上的问题。就是请问按照血缘关系来说,小明同学有几个爸爸?我想大家的反应就是:这不是废话吗,肯定一个呀。

好那这个问题就解决了。
java中的继承也是一样,继承只能单继承。继承的目的就是为了重用父类成员。
继承的格式如下:

[修饰符] class 类名1 extends 类名2{
[成员]
}

这段代码的意思是这样的,类名1继承了类名2。
类名1 是类名2的子类
类名2 是类名1的父类
一个子类只能有一个父类
一个父类可以有多个子类

比如我们定义一个动物父类Animal

package oop1;

public class Animal {
	
	private String eyes;
	
	private String nose;
	
	private String ear;
	
	public String getEyes() {
		return eyes;
	}
	
	public void shout() {
		System.out.println(eyes);
		System.out.println("怎么叫??");
	}
}

我们再定义一个子类Dog,

package oop1;

public class Dog extends Animal{
	
	/**
	 * 方法重写
	 */
	public String getEyes() {
		return "dog's eyes";
	}
	
	
	public void shout() {
		System.out.println(getEyes());
		System.out.println("汪汪汪");
	}
}

下面我们再聊一下重写(只针对方法)override
如果子类中包含了一个和父类相同的方法(修饰符可以相同,也可以变大,返回类型相同,方法名相同,参数相同),这个时候我们成为子类重写了父类的方法。如果父类的方法不能满足子类的需求。可以在子类中重写父类的方法,添加新的功能上去。

而后是重载overload
在同一个类中,方法名相同,参数不同(参数类型或者个数不同),返回类型不同不能称为重载。

成员方法重载:

public void shout() {
		System.out.println(this.getEyes());
		System.out.println("汪汪汪");
	}
	
	public void shout(String a) {
		
	}

构造方法也可以重载:

public Dog() {
		//super();//必须在构造方法的第一行
		this("眼睛","鼻子","耳朵");//也只能出现在第一行
		System.out.println("Dog");
	}
	
	public Dog(String eyes,String nose,String ear) {
		super(eyes,nose,ear);//不写的时候默认调用父类的无参构造方法
	}

接下来再普及一下基础的东西:
this
this代表当前类,this调用的是当前类的成员。
调用当前类方法,this.方法名(参数)
调用当前类的变量 this.变量
调用当前类的构造方法 this(参数)//必须在构造方法第一行

super
super代表的是父类对象 super代表的是父类的成员
调用父类方法 super.方法名(参数)
调用父类变量super.变量
调用父类的构造方法super(参数)//必须在构造方法的第一行

另外再普及一下权限修饰符:
Java中权限修饰符有4个
Private 私有的
默认(默认就是没有不写)
protected 受保护的
Public 公开的
接下来是使用这些修饰符后的范围

同类 同包 继承 不同包
private × × ×
默认 × ×
protected ×
public
发布了64 篇原创文章 · 获赞 2 · 访问量 860

猜你喜欢

转载自blog.csdn.net/cdut2016/article/details/103792873