1.static注意事项
静态方法中,只能访问静态,静态方法中没有this关键字
非静态方法可以访问所有
静态方法中没有this关键字
2.静态:随着类的加载而加载 非静态:跟对象有关
静态是无法调用非静态的
3.面向对象的三大特征:封装、继承、多态
4.封装:对象代表什么,就得封装对应的数据,并提供对应的行为
5.继承:java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继 承关系。
public class Student extends Preson{}
Student称为子类(派生类),Person称为父类(基类或超类)。
使用继承的好处:可以把个子类中重复的代码抽取到父类中了,提高代码的重复性。子类可以在父类的基础上,增加其他的功能,使子类更强大。
6.继承的特点:java只能单继承:一个类只能继承一个直接父亲类。java不支持多继承,但是支持多层继承。java中所以的类都直接或间接继承于Object类。
7.子类到底能继承父类中的哪些内容
8.虚方法表:非private,非static,非final
9.
10.继承中成员变量的访问特点:就近原则,先在局部位置找,本类成员位置找,父亲位置成员找,逐级往上
11.如果出现了重名的成员变量怎么办?
super调用直接访问父类
12.代码练习
public class text8 {
public static void main(String[]args){
OverseasStudnet s=new OverseasStudnet();
s.lunch();
}
}
class Person{
public void eat(){
System.out.println("吃米饭,吃菜");
}
public void drink(){
System.out.println("喝开水");
}
}
class OverseasStudnet extends Person{
public void lunch(){
this.eat();
this.drink();
super.eat();
super.drink();
}
public void eat(){
System.out.println("吃意大利面");
}
public void drink(){
System.out.println("喝凉水");
}
}
class Students extends Person{
public void lunch(){
//现在本类中查看eat和drink方法,就会调用子类的,如果没有,就会调用从父类中继承下来的eat和drink方法
eat();
drink();
//直接调用父类中的eat和drink方法
super.eat();
super.drink();
}
}
13.方法的重写:当父类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式:在继承体系中,子类出现了和父亲一模一样的方法声明,我们就称子类这个方法是重 写的方法
如果发生了重写,则会覆盖
14.方法重写注意事项和要求
重写方法的名称、形参列表必须与父类中的一致。
子类重写父类的方法时,访问权限子类必须大于等于父类。
子类重写父类方法时,返回值类型子类必须小于等于父类。
建议:重写的方法尽量和父类保持一致。
只有被添加到虚方法表中的方法才能被重写
15.this,super算法总结
16,什么是多态?
同类型的对象,表现出的不同形态
多态的表现形式
父亲类型 对象名称=子类对象
多态的前提
有继承关系,有父类引用指向子类对象,有方法重写
17.多态调用成员的特点
变量调用:编译看左边,运行也看左边
方法调用:编译看左边,运行看右边
18.多态的优势
在多态形式下,右边对象可以实现解耦合,便于扩展和维护
定义方法的时候,使用父类型做为参数,可以接受所有子类对象,体现了多态的扩展性与便利
19.多态的弊端
不能调用子类的特有功能
解决方案:变回子类类型就可以
20.引用数据类型的类型转换,有几种形式?
自动类型转换、强制类型转换
Person p=new Student();
Student s=(Student)p;
21.强制类型转换能解决什么问题
可以转换成真正的子类类型,从而调用子类的独有功能
转换类型与真实对象类型不一致会报错
转换的时候用instanceof关键字进行判断
22.instanceof关键字
instanceof是java的保留关键字,它的作用是测试它左边对象是否是它右边类的实例,返回 boolean的数据类型
23.什么是包
包就是文件夹,用来管理各种不同功能的java类,方便后期代码维护
24.包的规则
使用同一个包中类时,不需要导包
使用java.lang包中类时,不需要导包
其它情况都需要导包
如果同时使用两个包中的同名类,需要用全类名
25.包名书写的规则
公司域名反写+包的作用,需要全部英文小写,见名知意
26.什么是全类名
包名+类名
27.final
方法:表明该方法是最终方法,不能被重写
类:表明该类是最终类,不能被继承
变量:叫做常量,只能被赋值一次
final 修改基本数据类型:记录的值不能发生改变
final 修饰引用数据类型:记录的地址值不能发生改变,内部的属性值还是可以改变的
28.权限修饰符的分类
29.构造代码块
写在成员位置的代码块
作用:可以把多个构造方法中重复的代码取出来
执行时机:我们在创造本类对象的时候会先执行构造代码块再执行构造方法
30.静态代码块
格式:static{}
需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次
使用场景:
31.抽象方法
将共性的行为(方法)抽取到父类之后。由于每个子类执行的内容是不一样,所以,在父类中 不能确定具体的方法体。该方法就可以定义为抽象方法
32.抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
33.抽象类和抽象方法的定义格式
抽象方法的定义格式:public abstract 返回值类型 方法名(参数列表);
抽象类的定义格式:public abstract class 类名{}
34.抽象类的作用
抽取共性时,无法确定方法体,就把方法定义为抽象的,强制让子类按照某种格式写。抽象方 法所在的类,必须是抽象类
35.接口
接口是一种规则,是对行为的抽象
36.接口的定义和使用
接口关键字interface来定义
public interfance 接口名{}
接口不能实例化。接口和类之间是实现关系,通过implements关键字表示,
public class 类名 implements 接口名{}
接口的子类(实现类),要么重写接口中的所有抽象方法,要么是抽象类。
注意1:接口和类的实现关系,可以单实现,也可以多实现。
public class类名 implements 接口名1,接口名2{}
注意2 :实现类还可以在继承一个类的同时实现多个接口。
public class 类名 extends 父类 implements 接口名1,接口名2{}
37.接口成员的特点
成员变量:只能是常量。 默认修饰符:public staic final
构造方法: 没有
成员方法:只能是抽象方法。 默认修饰符:public abstract
38. 接口和类之间的关系
类和类的关系:继承关系,只能单继承,不能多继承,但是可以多层继承
类和接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的的同时实现 多个接口
接口和接口的关系:继承关系,可以单继承,也可以多继承
39. 什么是内部类
类的五大成员:属性、方法、构造方法、代码块、内部类
40.内部类的访问:内部类可以直接访问外部类的成员,包括私有。外部类要访问内部类的成员,
必须创建对象。
41.什么时候用到内部类
B类表示的事物是A类的一部分,且B单独存在没有意义
比如:汽车的发动机,ArrayList的迭代器,人的心脏等等
42.
43.静态内类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象
44.局部内部类
1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
2.外界是无法直接使用,需要在方法内部创建对象并使用。
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量
45.什么是匿名内部类
隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置
46.匿名内部类的格式
new 类名或者接口名(){
重写方法;
};
47.格式的细节
包含了继承或实现,方法重写,创建对象。整体就是一个类的子类对象或者接口的实现对象。
48.使用场景
当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现对象,如果实现类只要 使用一次,就可以用匿名内部类简化代码