java面向对象细节
静态方法(可以直接调用: 类名.方法名)
public class Student{
public static void say(){
System.out.println("说话");
}
}
public class example {
public static void main(String[] args) {
Student.say();
}
}
非静态方法(必须实例化对象之后再调用此类对象的非静态方法方法)
public class Student{
public void say(){
System.out.println("说话");
}
}
public class example {
public static void main(String[] args) {
Student student() = new Student();//实例化对象
student.say();
}
}
静态方法细节
public class example {
public static void main(String[] args) {...}
//静态方法和类一起加载
public static void a(){
c(); //调用c方法不会报错
b(); //调用不存在的b方法会报错
}
//非静态方法在类实例化之后才存在
public void b(){
}
public static void c(){
}
}
封装的意义(高内聚,低耦合):
属性私有,get/set来访问属性(确保数据的安全性)
继承细节
子类会继承父类的所有属性和方法,但无法直接访问父类的私有属性
super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
this:
- this() 默认调用本类的构造器方法
- super() 调用父类的构造器方法
重写(只出现在非静态方法中) @override
静态方法中:
public class Father {
public static void test(){
System.out.println("Father->test()");
}
}
public class Son extends Father{
public static void test(){
System.out.println("Son->test()");
}
}
public class hello {
public static void main(String[] args) {
Son son = new Son();
son.test();
//父类的引用指向了子类
Father father = new Son();
father.test();
}
}
输出结果为:
Son->test()
Father->test()
非静态方法中:
public class Father {
public void test(){
System.out.println("Father->test()");
}
}
public class Son extends Father{
@Override
public void test(){
System.out.println("Son->test()");
}
}
public class hello {
public static void main(String[] args) {
Son son = new Son();
son.test();
//父类的引用指向了子类
Father father = new Son();
father.test();
}
}
输出结果为:
Son->test()
Son->test()
结论:
静态方法是类的方法,与类一起被加载
非静态方法是对象的方法
重写只和非静态方法有关,和静态方法无关
重写注意点:
-
必须是继承关系,子类重写父类的方法
-
参数列表必须相同
-
修饰符范围可以放大不能缩小:public>protected>default>private
-
抛出异常的范围可以缩小不能扩大:ClassNotFoundException->Exception
多态
注意事项:
- 多态是方法的多态
- 父类子类之间有联系
- 多态存在条件:继承关系,方法需要重写,父类引用指向子类对象(Father father = new Son();)
- static final private修饰的方法不能被重写