这是我总结的面向对象的各个知识点:
1、继承:
(1)主要功能:扩展类的功能、代码的重用
(2)Java中只能允许单继承,但可以实现多个接口
2、子类对象的实例化过程:
先调用父类的构造方法,再调用子类的构造方法
3、Super关键字:
(1)从子类调用父类的操作,调用父类的属性、方法、构造方
(2)super()表示调用父类的构造方法,必须放在子类构造方法的第一行
(3)Super.方法(),明确指定访问父类的方法
(4)super.属性,明确调用父类的属性
4、子类覆写父类的方法:
子类的方法覆写父类的方法时,子类方法的访问权限不能比父类更严格
问题:方法从父类的private变为子类的dafault算是覆写吗?
不算,而是在子类中重新定义了一个新的方法
5、final关键字:
(1)使用final声明的类不能有子类
(2)使用final声明的变量为常量,常量的值不可改变
(3)使用final声明的方法不能被子类覆写
6、全局常量:
被static final 同时修饰的, public static final String STR=”hello” ;
7、抽象方法:
(1)定义:只声明而未实现的方法,必须使用abstract关键字
(2)例如: public abstract void fun() ;
8、抽象类:
(1)定义:包含一个抽象方法的类为抽象类
(2)抽象类和抽象方法必须使用abstract 关键字声明
(3)抽象方法只需声明,不需实现
(4)抽象类必须被子类继承,子类(假如不是抽象类的话)必须实现抽象类中的所有 抽象方法
(5)抽象类不能实例化对象
(6)抽象类中也可以包含一个接口
(7)抽象类中也可以一个抽象方法都没有,适配器类就是一个比较典型的例子,本来适配器类可以不用变为抽象类,只是觉得适配器类
中的方法全为空,这样的类是没有任何意义的,所以将其变为抽象类使其不能实例化生成对象。
9、抽象类中可以定义构造方法吗?
答:可以。因为抽象类必须被子类所继承,而子类在实例化之前又得先调用父类的构造方法,所有 可以。
10、接口:
(1)全部由“全局常量”和“公共的抽象方法”组成
(2)定义格式: interface 接口名称{ 全局常量 ; 公共抽象方法 ; }
(3)子类实现方式: class 子类 implements 接口名称{}
(4)一个接口可以同时继承多个接口 interface A extends 接口B,接口C{}
(5)一个抽象类可以实现多个接口,但是一个接口却不可以继承抽象类
(6)一个抽象类中可以包含多个接口,一个接口中也可以包含多个抽象类
11、类的多态:
(1)方法的重载与覆写
(2)对象的多态性
12、对象的多态性:
(1)向上转型:子类对象--->父类对象 (程序自动完成)
父类 父类对象 = 子类实例;
A a = new B()
转型之后因为操作的是父类,所以子类新的方法不能访问
(2)向下转型:父类对象--->子类对象 (向下转型时,必须明确的指明要转型的子类 类型)
子类 子类对象= (子类)父类对象实例;
注:在发生向下转型前要先进行向上转型,否则会出现异常
A a=new B() ; //先向上转型
B b=(B) a ; //再强制性向下转型
(3)可以解决多个参数接受的问题
13、instanceof关键字:
(1) 对象 A instanceof 类B ;如果对象A是类B的实例,则返回true,则false
(2) 作用:在对象进行向下转型之前,最好先用instanceof判断下
14、注意:
一个类永远不要继承一个已经实现好了的类,而是去继承抽象类或者实现接口
15、抽象类的实际应用:
(1)多用于 “模板设计”
16、接口的实际应用:
多用于 “制定标准
17、static关键字:
(1)被static 修饰的属性或方法 可以用类直接调用
(2)Static所修饰的属性 不是某个对象所特有的,而是所有对象共有的
(3)被static修饰了的方法里面不能存在“非static”的属性和方法,因为static可以在对象没有被实例化之前就被类调用,而
其他属性和方法需要对象被实例化后再调用。但是非static方法中却可以调用static方法和属性
18、抽象类与普通类的区别:
抽象类就是比普通类多定义了一些抽象方法,另外除了不能实例化之外,其他没有什么区别。
19、this关键字:
(1)表示本类中的属性this.age
(2)表示表示当前对象this.getAge()
(3)调用类的构造方法,this()方法必须放在构造函数首行
20、java的4种代码块:
定义:使用“{}”进行括起来的代码
(1)普通代码块: 直接定义在方法中的代码块
(2)构造代码块: 将代码块直接定义在类中,构造块优先于构造函数执行,每实例化一个对象就执行一次构造代码块
(3)静态代码块:直接使用“static”关键字声明的代码块,主方法中的静态代码块优 先于main()方法执行;普通类中的静态代码块优先于构造方法执 行,只执行一次。
(4)同步代码块:使用sychronized关键字修饰的代码块,在多线程同步操作时经常用到 语法格式: synchronized (同步的对象){ 需要同步的代码 }
21、Object类:
(1)一个类没有明确的指出继承哪个类,那么就表示默认继承Object类
(2)Object 类是所有类的父类,只要是引用数据类型都可以用Object类的对象接收
(3)主要方法: equals() toString() hashCode(),一般的类中要覆写这三种方法
22、匿名内部类:
(1)定义:如果一个类在整个操作中只使用一次的话,那么可以定义成匿名内部类
(2)匿名内部类是在抽象类和接口上面发展起来的