本帖最后由 小石姐姐 于 2017-12-22 16:24 编辑
就业班总结 继承:
作用: 多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),再让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员变和成员方法了。
概念:
从已有的类派生出新的类
已有类成为父类(基类),新类成为子类(派生类)
子类对于父类的关系就是继承
关键字:extends
作用: 子类继承父类时使用
定义位置:子类类名后
格式: 权限修饰符class 子类类名extends父类类名{}
继承特点:
Java语言只支持单一的继承,只能继承过一个父类
Java语言支持多层继承(一个儿子可以有一个亲爹,还可以有一个亲爷爷)
继承的优缺点
优点
提高了代码的复用性
提高了代码的可维护性
缺点
类的耦合性增强了
开发的原则:高内聚低耦合 0
内聚:就是自己完成某件事情的能力
耦合:类与类的关系
继承中成员变量的特点:
子类只能获取父类的非私有变量(老爹的私房钱儿子不知道)
子父类中成员变量的名字不一样直接获取父类的成员变量
子父类中成员变量名字一样的获取的是子类的成员变量
就近原则:谁离我近我就用谁
如果有局部变量就使用局部变量
如果没有局部变量,有子类的成员变量就是用子类的成员变量
如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
如果三个都没有变量名称 就出错了
this:使用本类中的成员方法或变量
super:使用
三个成员变量名字一样
super.成员变量名
this.成员变量名
成员变量名
super:可以获取父类的成员变量和成员方法 ,用法和this是相似的
this与super的区别:
this:当前对象的引用
调用子类的成员变量
调用子类的成员方法
在子类的构造方法第一行调用子类其他构造方法
super:子类对象的父类引用
调用父类的成员变量
调用父类的成员方法
在子类的构造方法第一行调用父类的构造方法
继承中成员方法的特点:
子类中没有这个方法,调用父类
子类中重写了这个方法,调用子类的
重写与重载的区别:
定义位置不同:
重载:同一个类中
重写:存在继承关系的子父类当中
方法的重写:override 在字符类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是重写过后子类的方法 在字符类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是重写过后子类的方法
方法的重载:在一个类中,但是其参数不一样(参数的个数,参数的类型,参数的顺序)
方法重写的应用场景:
当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法,
并可以在方法中使用关键字super调用父类的方法,这样做既可以保有父类的功能,也可以拥有子类的特有功能
方法重写的注意事项:
不能重写父类私有的方法,
权限必须大于等于父类方法的权限
注解:@Override
用于约束被注解方法必须是重写父类的方法,如果父类没有这个方法则报错
注意字母O是大写的
继承中构造方法的执行顺序
在有子父类继承关系的类中创建子类的对象,调用子类的构造方法,如果子类构造方法的第一行代码没有调用父类的构造方法,则会默认的调用父类的无参构造
肯定会先执行父类的构造,因为要先给父类的成员变量经行初始化,子类可能会使用到
我们可以使用super()在子类的构造方法的第一行中调用父类的构造方法
继承示例:
父类
public class Father{
public void eat();
}
子类
public class Son extends Father{
子类不用定义eat方法就可以调用,
因为从父类继承过来了
}
匿名对象:没有名字的对象
匿名对象的应用场景:
当方法只调用一次的时候可以使用匿名对象
可以当作参数进行传递,但是无法在传参之前做其他的事情
注意:匿名对象可以调用成员变量并赋值,但赋值并没有意义
多态的前提:
子父类的继承关系
子类重写了父类的方法
父类引用指向子类对象 Animal cat=new Cat();
动态绑定:运行期间调用的方法,是根据其具体的类型
编译期间
多态的成员特点:Dad x=new kid();
成员变量 编译时看的是左边,运行时看左边 student.age
静态方法 编译时看的是左边,运行时看左边 student.staticFunc();
成员方法 编译时看左边,运行时看右边 student.eat();
编译时看的都是左边,运行时成员方法看的是右边,其他(成员变量和静态方法)都是左边
多态中的向上转型和向下转型:
引用类型之间的转换
向上转型
由小到大(子类型转换成父类型)
向下转型
有大到小(父类型转换成子类型)
基本数据类型的转换
自动类型转换
由小到大
byte short char-- int -- long --float --double
强制类型转换
有大到小
多态的优缺点
优点:提高可维护性(多态前提所保证的),
提高代码的可扩展性
提高代码复用性
缺点:父类无法直接访问子类特有的成员
多态的应用:
向上转型:作为参数类型,简化代码
向下转型:调用子类对象特有的方法
instanceof语句
作用:判断一个对象是否是某个类的对象,如果是则返回true,如果不是则返回false
格式:对象 instanceof 类名
常见用法: if(s instanceof Student){}
abstract:关键字,用于修饰方法和类
抽象包括两种:
抽象方法:不同类的方法是相似的,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
抽象类:有抽象方法的类 必须是抽象类
注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类
抽象类
abstract class Animal{
public abstract void eat();
}
抽象类的特点:
成员变量
可以有成员变量
可以有常量
成员方法
可以有抽象方法
可以有非抽象方法
构造方法
可以有构造方法的,需要对抽象类的成员变量进行初始化、
抽象类的细节
abstract不能与final,private 共存
抽象类的思想
Java中应用的抽象
Reader/Writer类
利用抽象起到规范作用
链表:有链子连接起来的一堆结点
结点:地址值、值、下一个结点地址值
链表的特点:
查询慢,增删快
day 06
Collection接口:
boolean add(添加)
void clear(清空集合)
boolean contains(判断集合中是否包含元素)
boolean isEmpty(是否为空)
boolean remove (删除)
int size(返回集合中的元素个数)
object [ ] toArray(将集合转换成一个objct类型的数组)
集合的遍历方式"
1:toArray(),可以把集合转换成数组.然后遍历数组即可.
2:iterator(),可以返回一个迭代器,我可以通过迭代器对象来迭代集合.
Iterator:可以用于遍历集合
next()返回迭代写一个元素
hasNext()判断是否包含元素
迭代器是依赖集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,
foreach:增强for循环,一般用于遍历集合或者数组
:格式:for(元素的类型变量:集合或者数组对象){
可以直接使用变量;
}
List:
有序的(存储和读取的顺序是一致的)
有整数索引
允许重复的
LIST的特有功能:
void add :在指定索引位置添加指定元素
get :根据索引返回元素
remove:删除指定元素并返回
set:将指定索引位置的元素替换为指定元素,
创建列表对象List a = new ArrayList();
|