day09.java

继承、super、this、抽象类

1.继承

类的继承是面向对象程序设计的一个重要特点,通过继承可以实现代的重用微维示的类称为父类或超类(superclas) .由继承得到的类称为子类或派生类。

1.1定义:

继承就是子类继承父类的属性和行为,使得子类的对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

1.2继承的格式

class父类{
    
    
public class fx {
    
    
	public void metfu() {
    
    
		System.out.println("我是fu类  metzi");
	}
	
	public void method() {
    
    
		System.out.println("我是fu类  method");
	}

}
}
class 子类  extends 父类{
    
    
	public class fl extends fx{
    
    

	public void metzi() {
    
    
		System.out.println("我是子类  metzi");
	}
	@Override 
	public void method() {
    
    
		System.out.println("我是子类  method");
	}
	
}
}
public class fu {
    
    
	public static void main (String[] args) {
    
    
		fl zi=new fl();
		zi.method();
		zi.metfu();
		zi.metzi();
		
	}

}

1.3继承后的特点 --成员变量

成员变量不重名时,代码入下

class fu{
    
    
int num =2;
	}
	class zi extends fu{
    
    
		int num1= 3;
		public void show(){
    
    
    System.out.println{
    
    num}
     System.out.println{
    
    num1}
}
		}
		class xu {
    
    
		public static void main (String[] args) {
    
    

}
		}
		结果
		num =2
		num1 =3

成员变量相同

class fu{
    
    
int num =2;
	}
	class zi extends fu{
    
    
		int num= 3;
		public void show(){
    
    
    System.out.println{
    
    num}
     System.out.println{
    
    num}
}
		}
		class xu {
    
    
		public static void main (String[] args) {
    
    
			zi s =new zi();
			s.show();
}
		}
		结果
		num =3
		num1 =3在这里插入代码片

注意

子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super关键字,修饰父类成员变量,类似于之前学过的this.

使用格式:
super.父类成员变量名

class fu{
    
    
int num =2;
	}
	class zi extends fu{
    
    
		int num= 3;
		public void show(){
    
    
    System.out.println{
    
    super.num)
     System.out.println{
    
    this.num}
     结果
     num=2 
     num=3
}

1.4继承后的特点 --成员方法

成员方法不重名

如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。代码如下:

class fu{
    
    
public void show(){
    
    

     System.out.println(父类)
	}
	class zi extends fu{
    
    
		
		public void show1(){
    
    

     System.out.println{
    
    子类}
     }
     
 public    class xu {
    
    
		public static void main (String[] args) {
    
    
			zi s =new zi();
			s.show();
			s.show1();
			结果
			父类
			子类
}

成员方法重名–重写(Override)

如果子类父类中出现重名的成员方法,这时的访问是一-种特殊情况, 叫做方法重写(Override)。

●方法重写:子类中出现与父类一 模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

class fu{
    
    
public void show(){
    
    

     System.out.println(父类)
	}
	class zi extends fu{
    
    
		
		public void show(){
    
    

     System.out.println{
    
    子类}
     }
     
 public    class xu {
    
    
		public static void main (String[] args) {
    
    
			zi s =new zi();
			s.show();//只有这一个
			结果
			子类
}

重写的应用

子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。比如新的手机增加来电显示头像的功能,代码如下:

public class phoneA {
    
    
	public void call() {
    
    
	System.out.println("打电话");
	}
	public void send() {
    
    
	System.out.println("发短信");
	}
	public void show() {
    
    
	System.out.println("显示电话号码");
	}
}

public class phoneB extends phoneA {
    
    
	public void show() {
    
    
		System.out.println("显示电话号码");
		System.out.println("显示头像");
		System.out.println("显示归属地");
		}

}

public class phone {
    
    
	public static void main(String[] args) {
    
    
		phoneB x=new phoneB();
		x.call();
		x.send();
		x.show();
		System.out.println("=========");
		
		phoneA X=new phoneA();
		X.call();
		X.send();
		X.show();
	}

}
打电话
发短信
显示电话号码
显示头像
显示归属地
=========
打电话
发短信
显示电话号码

1.5继承后的特点 --构造方法

1.构造方法的名字是与类名一致的。 所以子类是无法继承父类构造方法的。
2.构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认有一一个super(),表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。代码如下:

class fu{
    
    
fu(){
    
    

     System.out.println(父类)
	}
	class zi extends fu{
    
    
		
		zi(){
    
    

     System.out.println{
    
    子类}
     }
     
 public    class xu {
    
    
		public static void main (String[] args) {
    
    
			zi s =new zi();
			结果
			父类
			子类

1.6super和this的含义

父类空间优先于子类对象产生
在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的造方法调用时,一定先调用父类的构造方法。理解图解如下:
在这里插入图片描述super:代表父类的春初空间标识(可以理解为父亲的引用)
this:代表当前对象的引用(谁调用谁就用谁)

1.7 继承特点

1、java只能单继承,不能多继承

2020080605013

猜你喜欢

转载自blog.csdn.net/qq_55689246/article/details/115458317