Java--继承

继承按照我的理解就是拥有别人所拥有的属性

官方定义:当多个属性中存在相同属性和行为时,将这些内容抽取一个单独的类中,那么多个类无需再定义这些属性,只需继承这个类即可。
其中,多个类称为子类,单独的类称为父类

Java中只能单继承不能多继承
在这里插入图片描述
但是可以多层继承
在这里插入图片描述

继承格式

class A extends B{}

继承中成员变量的特点

写个代码来说说

class Fu{
	int age=48;
}
class Zi extends Fu{
	int age=18;
void show()
{	
	System.out.println(age);         //输出子类18
	System.out.println(super.age);         //输出父类48
}

}

class DemoJicheng{
	public static void main(String[] args)
	{
		Zi z=new Zi();
		z.show();
	}
}
成员函数特点
package com.b;
class Fu{
	int age=48;
	void talk()
	{
		System.out.println("爸爸会讲中文。");
	}
}
class Zi extends Fu{
	int age=18;
void show()
{	
	System.out.println(age);         //输出子类18
	System.out.println(super.age);         //输出父类48
}
}
public class Demo5 {
	public static void main(String[] args)
	{
		Zi z=new Zi();
		z.show();
		z.talk();              
		//当子类和父类中的方法名相同时,执行的是子类的方法。
		//原因:当名字相同时,子类的方法会覆盖父类的方法,这称为方法的重写
	}
}

方法重写

注意

  • 重写方法必须和被重写的方法具有相同的方法名参数列表返回值类型
  • 覆盖时子类方法权限一定要大于父类方法权限(静态只能覆盖静态)
  • 父类中私有方法不可以被覆盖
方法重载与方法重写的区别

1.定义不同

  • 方法重载指方法名相同,返回值或者传入参数不同
  • 方法重写,要求方法名,返回值传入参数都相同

2.作用不同

  • 方法重载作用在同一方法中
  • 方法重写作用在子父类中
子类实例化过程
package com.b;
class Fu{
	int age=48;
	Fu(){
		talk();
		System.out.println("父类构造函数");
	}	
	void talk()
	{
		System.out.println("爸爸会讲中文。");
	}
}
class Zi extends Fu{
	int age=18;
	Zi()
	{
		//this();      //super和this只能存在一个    
		super();      // 不写的话会隐藏
		System.out.println("子类构造函数");
	}

void talk()
	{
		System.out.println("儿子会讲中文。");
	}
}
public class Demo5 {
	public static void main(String[] args)
	{
		new Zi();     //匿名对象,只能调用一次  		
	}
}



/*输出结果
儿子会讲中文
父类构造函数
子类构造函数
*/
//原因,talk()被子类重写
/*执行顺序
1.main函数进栈后,先执行子类的构造函数
2.子类构造函数里,包含了super();所以会跳到父类构造函数
3.父类构造函数里也有个super();会跳到object。但是,object啥也没有执行完弹栈。
4.父类构造函数执行talk();因为takl被重写,会输出子类里的talk();
5.执行完后,输出“爸爸会说中文”,到此父类执行完弹栈
6.子类继续执行输出“儿子会说中文”,执行完弹栈
7.main执行完,弹栈
*/
最后再来个final关键字

final可以修饰类,方法,变量
特点:

  • final修饰的类不可以被继承
  • final修饰的方法不可以被覆盖
  • final修饰的变量是一个常量。只能被赋值一次
  • 内部类只能访问被final修饰的局部变量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章