黑马程序员技术交流社区
标题:
Java0618基础班第八天手敲笔记(1)
[打印本页]
作者:
jkdong
时间:
2015-7-1 22:54
标题:
Java0618基础班第八天手敲笔记(1)
今天是基础班的最基础内容
day08回顾
继承是?
把多个类中的共性内容抽取出来,其他的类继承自该类,就可以使用这些
继承特点
子类不能使用父类私有成员
只能单继承,但是支持多重继承
this 和 super
this 本类对象引用---在创建对象的同时就会有一个this产生
super 是父类内存空间的标识(可以理解成父类对象的引用)
变量
this.变量名--使用本类成员变量
suoer.变量--使用父类的成员变量
成员方法
this.方法名()--
super.方法名()--使用父类方法(经常用来在方法的重写中国使用被覆盖掉的父类父类功能)
构造方法
this(具体参数)--根据参数匹配调用本类其他构造
super(具体参数)--根据参数匹配调用父类中的构造
--子类对象的构造方法内部默认第一行都有一个语句:super(),默认调用父类的无参构造
作用:为了初始化父类中的数据
重写与重载
重写:子父类之间出现的方法声明(返回值类型,方法名,参数列表)完全一致
子类的方法的访问权限必须大于等于父类
父类的私有方法不能被重写
静态只能被静态重写
final修饰的方法不能被重写
final关键字
修饰类--不能被继承
修饰方法--不能被重写
修饰成员变量--其实是一个常量
类变量和实例变量
实例变量
不加static修饰的成员变量--跟对象走
类变量
加static修饰的成员变量--跟类走
day09课程目标
理解多态的概念和前提
掌握多态的成员特点
理解多态的弊端和好处
掌握多态中的类型转换
理解抽象类、抽象方法和接口的由来
掌握抽象类的基本特点和成员特点
掌握接口的基本特点和成员特点
理解类与接口的关系
理解接口与抽象类的区别
理解接口的思想特点
多态概述
多态:
对象在不同时刻表现出来的不同状态
(子类对象用父类接收)
即父类(父接口)引用指向子类对象
针对引用数据类型
编译期间状态
运行期间状态
举例:水:(水,冰,水蒸气)
狗:狗是狗,狗是动物,狗是宠物,狗是宠物
java中的多态可以简单的记成:父类子对象
多态的前提:
要有继承或者实现关系
要有方法的重写或者实现(多态就体现在方法上)
要有父类引用指向子类对象
多态间的成员特点
成员变量:
编译看左边,运行看左边
成员方法:有重写
编译看左边,运行看右边
产生这种现象(运行时看的地方不一样)的原因就是:方法有重写。而变量没有。
在多态中,父类引用其实指向的是一个子类对象,也就是说,真正干活或者说完成指定功能的子类对象,子类重写了该功能,
对于该功能来说,他有区别于父类的实现,所以运行看右边(子类)。但是成员变量没有重写或者覆盖,也就是子类没有自己具体的实现,
所以运行时还是看左边。
多态的弊端:
继承弊端:强耦合(关联性太强)
多态弊端:父类引用不能使用子类特有功能
基本类型:隐式转换(小-大),强制类型转换(大-小)
引用类型:向上转型(小-大),向下转型(大-小)
Fu fu = new Zi();//向上转型
Zi z =(Zi)fu;//向下转型
类型转换异常:ClassCastException
原因:
类型不匹配
class Animal...
class Cat extends Animal...
class Cat extends Animal...
Animal a= new Cat();//多态:向上转型
a = new Dog();// 从新赋值
Dog d = (Dog)a;//向下转型
Cat c = (Cat)a;
向下转型必训转换成对象原本的类型或者其父类型
多态的好处
当我们需要创建很多对象时,对象创建越多重复代码越多
把每一个调用的整体封装,然后传递变化的对象
用发展的眼光来看待事物
思路
把行为封装成方法
然后把方法封装成工具类
在测试类中调用即可
(还可以再改进,将多态引入,向上转型)
多态好处:
为了提高代码的扩展性和可维护性
Animal a1 = new Cat();//多态
Animal a2 = new Dong();//多态
public void show(Animal a)//可以接收Animal的任何一个子类都可以
{
a.show();//重写--具体方法调用的是子类
a.eat();
}
抽象类:有相同方法,方法内容却不同,只有抽象方法
抽象方法:
只有方法声明没有方法体的方法。用关键字abstract来表示
针对没有方法体的方法java提供了一种表示形式:抽象方法
这时用关键字abstract来表示抽象
at();
抽象类
如果一个类含有抽象方法,这个类被称为抽象类,用关键字abstract来表示
abstract class A
{
public abstract eat();
}
特点
抽象类抽象方法用关键字abstract表示
有抽象方法的类一定的是抽象类(或者接口)
抽象类中不一定有抽象方法(也可以为空)
抽象类不能被实例化,要想实例化,必须使用具体的实现子类的对象
子类继承自抽象类,要么子类继续抽象,要么就必须重写抽象类中的抽象方法
抽象类的作用:
强制要求子类必须完成某些功能(即重写父类中的所有抽象方法)
抽象类的多态
Animal a = new Dog();
抽象类成员特点
成员变量:可以有成员变量也可以有常量
构造方法:有构造方法,
可以用于子类访问数据前对父类数据进行初始化
成员方法:可以有抽象方法也可以有非抽象方法
抽象方法是为了强制要求子类实现某些功能
非抽象方法是供子类继承,提高代码的复用性
不能和abstract共存的关键字都有:
1.final:因为被final修饰的类不能被继承,被final修饰的方法不能被重写。
2.private:因为被private修饰的方法不能重写,但是abstract方法要求重写。
3.static:因为一个方法要是同时被static 和abstract修饰,那么这个方法就可以类名.方法名 调用. 但是此方法是抽象的,调用也无意义,所以就导致static 和abstract不能共存.
作者:
jkdong
时间:
2015-7-1 22:58
该帖发错,版主看到后请删除,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2