封装就是将对象写在一个类中(属性私有),只留出一个接口可以控制类中的属性和方法(get/set)
封装可以提高程序的安全性,保护数据。
隐藏代码细节。
统一接口。
增加系统可维护性。
//子类重写了父类方法
1. 方法名必须相同。
2. 形参列表必须相同。
3. 修饰符范围可以扩大,不能缩小。
4. 抛出的异常范围可以被缩小,但不能扩大。
通过多态可让程序可扩展性更强。
一个对象的实际类型是确定的,可以指向的引用类型是不确定的(父类的引用指向子类的类型)。
//静态方法的调用只和等号左边的类型有关。
A a = new A();
B b = new B();
//不能进行重写的方法
//1. static方法,它属于类,不属于实例。
//2. final为常量,存在于常量池中,不能被重写。
//3. private为私有方法,不能被重写。
子类重写了父类方法,调用默认调子类。没有重写,调父类。
子类能调用自己和父类(非private)的方法;父类不能调用子类独有的方法,但可进行类的强制转换(高转低)。
//定义一个Person父类,他有Student和Teacher两个子类
Object o = new Student();
System.out.println(o instanceof Student);
System.out.println(o instanceof Person);
System.out.println(o instanceof Object);
System.out.println(o instanceof Teacher);
System.out.println(o instanceof String);
//输出:true true true flase flase
/--------------------------------
//Object > String
//Object > Person > Teacher
//Object > Person > Student
//instanceof只可判有父子关系的类,同级或不相关类返回flase
所有类型转换都是 低 ----------->高 ,否则需要强制类型转换,对象类型也是。
// 父(高) <----- 子(低) 子类转父类可能会丢失一些自己的方法
Person p = new Student();
// 父类转换为子类也需要强制类型转换,之后就可以使用Student中独有的方法了
Student s = (Student)p;
静态修饰的变量和方法可以通过类或对象进行调用,非静态只能通过对象调用。
静态方法可以调用静态方法和属性,但不能调用非静态方法和属性,因为静态修饰的是和类一起在内存方法区中被创建的,创建静态方法和属性时,非静态的还没有被创建!
static修饰的内容只执行一次(同一方法new了两次,第二次static不执行)
在导包时加入static可直接导入类中的方法。(静态导入包)
类的内部再定义一个类。
内部类实例化必须先实例化外部类,再通过外部类实例化内部类
//实例化外部类
Outer outer = new Outer();
//通过外部类.new来实例化内部类
Outer.Inner inner = outer.new Inner();
内部类可以拿到外部类的私有属性和方法,但取不到static修饰的(因为static出生时非static类还没出生!)
在方法中也可以写class(局部内部类)
原文:https://www.cnblogs.com/sxblogs/p/12883361.html