JAVA笔记六(21-24 对象转型(多态性)、面向对象应用、抽象类和抽象函数)

二十一、对象的转型(重要)面向对象多态性的体现

1.对象的向上转型

向上转型:将子类的对象赋值给父类的引用;

Student s = new Student();

Person p = s;

这两句也可以这样写:    Person p = new Student();

一个引用能调用那些成员(变量和函数),取决于这个引用的类型;但是它调用哪一个变量和函数,取决于这个引用所指向的对象。

public class Test{
	public static void main(String[] aegs){
		//Student s = new Student();
		//Person p = s;
		
		p.name ="lisi";
		p.age = 20;
		s.address ="bj";
		
		s.introduce();
		p.introduce();
	}
}

运行结果


2.对象的向下转型

将父类的对象赋值给子类的引用;(向下转型的前提是向上转型)

Student s1 = new Student();

Person p = s1;

Student s2 = (Student)p;  //必须强制类型转换。


public class Test{
	public static void main(String[] args){
		Person p = new Student();
		Student s = (Student)p;
		
		//错误的向下转型:因为不是所有的Person对象都是Student.就像不是所有的long都是int一样。
		//Person p = new Person();
		//Student s = (Student)p;  
	}
}

二十二、面向对象应用(一)

面向对象需要解决的问题就是:如何适应需求的不断变化。

例子:HP打印机、佳能打印机:可以抽象出一个打印机类,把重复的成员方法放在父类;各个子类,添加或者重载函数;

1.如果碰到定义两个类,成员方法有重复的时候,尝试使用继承,把重复代码集中到父类上;

2.不管碰到任何有重复代码的情况,要有意识去去除重复代码。

二十三、抽象类和抽象函数

1.抽象函数的语法特征

什么是抽象函数:只有函数的定义,没有函数体的函数被称为抽象函数;(函数的定义:返回值类型、函数名和参数列表组成。)

abstract    void     fun();

2.抽象类的语法特征

什么是抽象类:使用abstract定义的类;

抽象类特点:1)不能够生成对象; 2)如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类; 3)。抽象类中也可以没有抽象函数。

abstract class Person{
	String name;
	int age;
		
	void introduce(){
		System.out.println("my name is "+name+ ", age is" + age);
	}
	
	abstract void eat();
}

3.抽象类的作用

抽象类是一个基类,用来作为父类,子类复写父类中的抽象函数;

抽象类不能生成对象,但是可以拥有构造函数;不能直接调用抽象类的构造函数生成对象,但是抽象类的子类可以调用抽象类的构造函数(super():)


abstract class Person{
	String name;
	int age;
	
	Person(){
	}
	
	Person(String name, int age){
		this.name = name;
		this.age = age;
	}
		
	void introduce(){
		System.out.println("my name is "+name+ ", age is" + age);
	}
	
	abstract void eat();
}
class chinese extends Person{
	String address;

	chinese(){
	//super();  如果没有加这句,编译器会自动加上。
	}
	
	chinese(String name, int age, String adress){
		super(name,age);
		this.address =address;
	}
	
	void eat(){
		System.out.println("eat with chopsticks");
	}
}

二十四、为什么用抽象类

抽象类表达了一种概念。


抽象类的作用:在每个子类某个函数的方法体都不一样的时候,父类将此函数写为抽象函数,强制子类将此函数复写。


如果一段代码在语义上是有错误的,那么在语法上也应该是有错误的。这是未实现的。所有写代码的时候要注意语义和语法的统一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值