Java第一阶段复习_Day09

一.多态
1.定义:多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。主要是指同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。好处是可以把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。例如:水,在不同时刻可以有多种形态,包括水蒸气,冰,水。

2.特点:
1.多态的前提是继承。
2.要有方法的重写。
3.父类引用指向子类对象,如:Animal a = new Dog(); – 小到大,向上转型。
4.多态中,编译看左边,运行看右边。

3.简单案例

package Practice;

public class Practice_04 {
    
    

	public static void main(String[] args) {
    
    
		
		Animal a = new Dog();//父类引用指向子类对象。
		                     //编译看左边,运行看右边。
		a.eat();
		// Dog dog = new Dog(); ctrl + 1 可以便捷生成左侧代码。

	}

}

class Animal{
    
    
	
	public void eat() {
    
    
		
		System.out.println("吃肉");
		
	}
	
}

class Dog extends Animal{
    
    
	
	@Override
	public void eat() {
    
    
		
		System.out.println("吃狗粮");
		
	}
	
}

4.优点:
<1>多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法。
<2>提高了程序的扩展性和可维护性。

5.特点:
<1>成员变量:使用的是父类的。
<2>成员方法:由于存在重写现象所以使用的是子类的。
<3>静态成员:随着对象而存在,谁调用的就返回谁的。

6.简单案例

package Practice;

public class Practice_05 {
    
    

	public static void main(String[] args) {
    
    
		
		Father f = new Son();
		
		f.read();//成员方法使用的是子类的。
		
		System.out.println(f.age);//成员变量使用的是父类的。
	    
		System.out.println(Son.name);//调用Son的静态成员变量。
		
		System.out.println(Father.age);//调用Father的静态成员变量。
		
		Father.read();//静态资源不存在重写现象。

	}

}

class Father{
    
    
	
	String name;
	static int age = 99;
	
	static public void read() {
    
    
		
		System.out.println("看报纸");
		
	}
	
}

class Son extends Father{
    
    
	
	static String name = "Angle";
	int age;
	
	static public void read() {
    
    
		
		System.out.println("看漫画");
		
	}
	
}

二.异常
1.定义:用来封装错误信息的对象。
2.组成结构:类型,提示,行号。
3.继承结构:
Throwable - 顶级父类
– Error:系统错误,无法修复,一般不是软件问题
– Exception:可修复的错误
–RunTimeException
–ClassCastException
–ClassNotFoundException
4.简单案例

package Practice;
import java.util.Scanner;
//测试异常。
public class Practice_01 {
    
    

	public static void main(String[] args) {
    
    
		
		Method();

	}
	
	public static void Method() {
    
    
		
		//接收用户输入的两个整数,做除法运算。
		System.out.print("请输入第一个数a:");
		int a = new Scanner(System.in).nextInt();
		
		System.out.print("请输入第二个数b:");
		int b = new Scanner(System.in).nextInt();
		
		System.out.println(a/b);
		
	}

}

在这里插入图片描述
三.异常处理方案
1.捕获方式:
try{
需要捕获的代码
}catch(异常类型 异常名){
处理方案
}
在这里插入图片描述
在这里插入图片描述
2.捕获异常中的多态运用
在这里插入图片描述
3.抛出方式:
在会发生异常的方法上添加代码:throws 异常类型。
例如: public static void main(String[] args) throws Exception{
在这里插入图片描述
四.抽象类
1.定义:Java中可以定义没有方法体的方法,该方法由其子类来具体的实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。抽象类可以理解为是一个只有方法声明没有方法体的特殊类。
在这里插入图片描述
2.特点:
<1>通过java关键字abstract实现。
<2>可以修饰方法或者类。
<3>抽象类中可以没有抽象方法(由子类去实现)。
<4>如果类中有抽象方法,那该类必须定义为一个抽象类。
<5>子类继承了抽象类以后,要么还是一个抽象类,要么就把所有抽象方法都重写。
<6> 多用于多态中。
<7>抽象类不可以被实例化。

3.简单案例

package Practice;

public class Practice_04 {
    
    

	public static void main(String[] args) {
    
    
		
		Animal1 an = new Dog1();//抽象类不能实例化,因此new一个非抽象子类。
		an.eat();//调用父类的方法声明,若经过重写,则用子类的方法体。

	}

}
abstract class Animal1{
    
    
	
	public abstract void eat();//抽象方法。
	
	public void sleep() {
    
    //普通方法。
		
		System.out.println("睡");
		
	}
	
}

class Dog1 extends Animal1{
    
    //要么继承之后重写父类的方法。
	
	public void eat() {
    
    
		
		System.out.println("吃狗粮");
		
	}
	
}

abstract class Cat1 extends Animal1{
    
    //要么还是一个抽象类。
	
}

4.简单用法

package Practice;
//抽象类的用法。
public class Practice_05 {
    
    

	public static void main(String[] args) {
    
    
		
		Father f = new Son();
		System.out.println(f.name);
		System.out.println(f.age);
		f.read();
		f.eat();

	}

}
abstract class Father{
    
    
	
	//构造方法,为了创建对象。
	//既然抽象类不能被new,那么创建构造方法的目的是为了给子类new。
	public Father() {
    
    
		
		System.out.println("无参构造方法");
		
	}
	
	public void read() {
    
    
		
		System.out.println("看新闻");
		
	}
	
	public abstract void eat();
	
	int age = 20;
	public static final String name = "ydx";
	
}

class Son extends Father{
    
    
	
	public Son() {
    
    
		
		super();
		
	}
	
	public void eat() {
    
    
		
		System.out.println("吃饭");
		
	}
	
}

猜你喜欢

转载自blog.csdn.net/weixin_41858806/article/details/114914854