Java基础第九讲

一、多态


   1.多态的前提


1)要有继承关系


2)要由方法重写


3)要由父类引用指向子类对象


   2.访问特点


1)成员变量


   编译看父类,运行看父类.


2)成员方法


   编译看父类,运行看子类.


3)静态方法


   编译看父类,运行看父类.


   3.多态的好处


1)提高代码的维护性


2)提高代码的扩展性


3.多态的弊端


   不能再使用子类的特有功能.

 

class TestAnimal{


	public static void main(String[] args){
	
			Person p = new SuperMan();
			System.out.println(p.name);
			p.谈生意();


			SuperMan sm = (SuperMan)p;
			sm.救人();
	}
}


class Person{
		String name = "John";
		public void 谈生意(){
			System.out.println("谈生意");
		}
}


class SuperMan extends Person {
		String name = "超人";
		public void 谈生意(){
			System.out.println("谈几个亿的生意");
		}


		public void 救人(){
			System.out.println("飞出去救人");
		}
}


4.多态的向上转型和向下转型


   向上转型相当于数据的默认类型转换,向下转型相当于数据的强制类型转换.


二、抽象类


   1.应用


1)类:abstract class 类名 { }


2)方法:public abstract void xxx();


   2.特点


1)如果定义了一个抽象类,其方法必须重写.


2)抽象类中不一定有抽象方法,但抽象方法的类一定是抽象类.


   3.注意事项


1)成员比昂两既可以是变量,也可以使常量.


2)有构造方法,用于子类访问父类数据的初始化.


3)成员方法既可以是抽象的,也可以使非抽象的.


4)一个抽象类如果没有抽象方法,也可以作为一个抽象类.这样其他类将不能再创建本类对象,只能由子类来完成.


5)abstract不能和private、static、final一起使用.

class TestTeacher{


	public static void main(String[] args){
			基础Teacher jc = new 基础Teacher("张三",23);
			jc.speak();


			就业Teacher jy = new 就业Teacher("李四",24);
			jy.speak();
	}
}


abstract class Teacher{										//抽出一个老师类


	private String name;
	private int age;


	public Teacher(){}								//老师类的空参构造方法


	public Teacher(String name,int age){			//老师类的有参构造方法
		this.name = name;
		this.age = age;
	}


	public void setName(String name){				//设置姓名
		this.name = name;
	}


	public String getName(){						//获取姓名
		return name;
	}


	public void setAge(int age){					//设置年龄
		this.age = age;
	}


	public int getAge(){							//获取年龄
		return age;
	}


	public abstract void speak();					//讲课方法
}


class 基础Teacher extends Teacher{


	public 基础Teacher(){}


	public 基础Teacher(String name,int age){
		super(name,age);
	}


	public void speak(){
		System.out.println("我叫" + getName() + "我今年" + getAge() + "岁,我教se");
	}
}


class 就业Teacher extends Teacher{


	public 就业Teacher(){}


	public 就业Teacher(String name,int age){
		super(name,age);
	}


	public void speak(){
		System.out.println("我叫" + getName() + "我今年" + getAge() + "岁,我教ee");
	}
}




三、接口


   接口的成员比昂两只能是静态的常量.接口中定义的常量前面会默认省略public static fanal.接口中所有的方法都是抽象的,可直接写方法名: void xxx(){ }前面默认省略public abstract.


1.类与类之间的关系


   继承关系,只能单继承,或多层基层.


2.类与接口之间的关系


   实现关系,可以单实现也可以多实现.还可以在继承一个类的同时实现多个接口.


3.接口与接口之间的关系


   继承关系,可以单继承,也可以多继承.

class TestAnimal {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}


abstract class Animal {
	private String name;
	private int age;


	public Animal(){}


	public Animal(String name,int age) {
		this.name = name;
		this.age = age;
	}


	public void setName(String name) {
		this.name = name;
	}


	public String getName() {
		return name;
	}


	public void setAge(int age) {
		this.age = age;
	}


	public int getAge() {
		return age;
	}


	public abstract void eat();


	public abstract void sleep();
}


interface Jump {
	public void jump();
}


class Cat extends Animal implements Jump {
	public Cat(){}


	public Cat(String name,int age) {
		super(name,age);
	}


	public void eat() {
		System.out.println("猫吃鱼");
	}


	public void sleep(){
		System.out.println("侧着睡");
	}


	public void jump() {
		System.out.println("猫跳高");
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值