面向对象
super详解
继承方法:
public class Name extends father{
code
}
子类调用:this .name
父类调用:super.name super.print()
-
子类构造时会调用父类的构造器,并且
super()
必须时第一行 -
写了有参构造会覆盖无参构造,需要手写无参构造
-
子类的构造器 要么调用父类的无参(可以不显式调用),要么手动调用有参(不手写无参的话)
-
-
super和this的区别
-
super调用时需要继承关系
-
方法重写
重写是方法的重写,与属性无关
前提:需要有继承关系,子类重写父类的方法
要求:方法名必须相同
参数列表必须相同
修饰符:范围可以扩大:public》protected》default》
抛出的异常:范围可以缩小但不能扩大
-
父类static方法
-
-
子类调用与Typename有关
-
-
父类非静态方法
-
-
子类调用与右边有关
-
非静态方法才能重写
public方法才可以重写
多态
一个对象的实际类型是确定的
但是指向的引用类型不确定
pl..Student s1 = new Student
Person s2 = new Student
对象能执行哪些方法主要看对象左边的类型,和右边关系不大;
-
多态是方法的多态
-
强制转换只能低转高 Student->Person ClassCastException
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象
instanceof
用来判断两个类之间是否有关系
返回值为true或者false
强制转换
只存在于高转低 Person到Student,因为Student到Person不需要强制转换,因为Student里面的方法更多
static总结
-
在类里面
-
-
静态变量:属于类,可以用类名访问,被对象共享
-
静态方法:可以用类直接调用。非静态可以调用静态方法静态方法只能调用静态方法
-
静态代码块
format:static{/*code*/}
-
最早执行
-
赋初始值
匿名代码块
format:{/*code*/}
第二执行
静态导入包
package static import java.lang.Math.random
抽象类
* 接口可以多继承
* 抽象类不能被实例化,必须被继承
* 抽象方法必须在抽象类中
format:
public abstract class Action{//抽象类
public abstract void eat();//抽象方法
}
抽象类存在的意义是更好的实现多态//提高开发效率//可扩展性比较高
接口
-
只有规范,自己无法写方法(抽象类-方法)
-
实现约束和实现分离
-
声明类的关键词是class,声明结构的关键词是interface
-
接口的本质是契约
-
接口里面的方法默认都是public abstract
-
实现类用impl结尾
-
接口里面的属性是常量
实现类的写法:
public class xxxximpl implements xxxx1, xxxx2{}
内部类
先实例化外部类,再用外部类实例化的对象实例化内部类
-
内部类可以获得外部类的私有属性
-