学了java这么长时间,一直也搞不清它是怎么面向对象的,当然现在也没搞太清楚,写一下现在的理解以备以后反思的时候有个参照
提面向对象就不得不提:抽象、封装、继承、多态,抽象是封装、继承、多态的基础,把相同的东西抽出来才有了类(class)、变量、数据结构等等。Java在对类等的各项规定和设置,保障了这三大特性。
封装
Java语言里,声明的时候,可以用权限修饰符设置访问权限,不设置则默认为defult,各修饰符及其代表的权限见下表,defult其实就是package权限,可以访问包中的权限及变量。修饰符 类内部 同一个包 子类 任何地方 private Yes defult Yes Yes protected Yes Yes Yes public Yes Yes Yes Yes 继承
继承是让子类具备父类的特性,比如父类声明的变量、方法甚至构造方法等等。
那么父类声明private的特性可以被子类继承吗?NO!原因见上表。
父类没有声明的特性可以被子类继承吗?分情况!由上表可查,同一个包下的子类可访问,非同一个包的子类不可访问。继承的关键字是extends和implements。
extends描述的是类与类之间的单向继承,就是说一个子类只能拥有一个父类。
public class Penguin extends Animal{
}
implements描述的是类与接口间的多继承
public class C implements A,B {
}
3.. 多态
java在继承中可以实现重写,当父类引用指向子类对象时,Java提供了动态绑定(迟绑定)的机制,就是实际new的谁就调用谁。
添加新类型的时候,直接继承父类,实现的时候直接调用即可。
public class Basic_extends {
public static void main(String[] args) {
A b = new B();//注意,声明的是A
A c = new C();//这里声明类型的也是A
b.dosome();
c.dosome();
}
}
class A {
public void dosome() {
System.out.println("父类");
}
}
class B extends A {
public void dosome() {
System.out.println("子类B");
}
}
class C extends A {
public void dosome() {
System.out.println("子类C");
}
}