JAVA笔记六(21-24 对象转型(多态性)、面向对象应用、抽象类和抽象函数)
来源:互联网 发布:淘宝自动上传宝贝软件 编辑:程序博客网 时间:2024/05/29 05:56
二十一、对象的转型(重要)面向对象多态性的体现
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");}}
二十四、为什么用抽象类
抽象类表达了一种概念。
抽象类的作用:在每个子类某个函数的方法体都不一样的时候,父类将此函数写为抽象函数,强制子类将此函数复写。
如果一段代码在语义上是有错误的,那么在语法上也应该是有错误的。这是未实现的。所有写代码的时候要注意语义和语法的统一。
- JAVA笔记六(21-24 对象转型(多态性)、面向对象应用、抽象类和抽象函数)
- 5.4-全栈Java笔记:面向对象进阶之对象的转型 | FINAL关键字 |抽象方法和抽象类
- java面向对象(抽象类)
- Java面向对象(四)抽象类
- Java面向对象抽象类应用
- java 面向对象抽象类的应用
- 面向对象方法的特性:(抽象,封装,继承,多态性)
- java基础-面向对象(接口和抽象类)
- Java面向对象笔记(十二)抽象类
- 面向对象编程基础 五 抽象函数和抽象类
- java面向对象,接口和抽象类.
- Java面向对象05-抽象方法,抽象类和接口
- Java面向对象-抽象方法和抽象类
- 黑马程序员_笔记六_面向对象(高级)---抽象类
- JAVA面向对象-----抽象类
- Java面向对象-抽象类
- java--面向对象(抽象&接口)
- Java面向对象(五)abstract --- 抽象
- 浅谈fastDFS(下)
- Thread类调用run()方法和调用start()方法的区别
- JAVA笔记五(16-20 this、static、inherit、子类实例化及override)
- select和poll程序测试以及结果分析
- jquery上下左右无缝滚动-YlMarquee
- JAVA笔记六(21-24 对象转型(多态性)、面向对象应用、抽象类和抽象函数)
- JQuery判断浏览器类型
- Hadoop源码分析笔记(十二):名字节点--文件系统目录树
- VC++6.0编译错误-C1076 /Zm
- JAVA笔记七 (25-29包和访问权限(封装性)及接口)
- 内存管理 - 11.12 使用每个CPU数据的原因
- 站长之家被黑
- 《STL源码剖析》 第4章 序列式容器总结
- dom4j解析xml