只要类被定义为(final)就是不能被继承的
Extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)
1. public继承 明显父类public成员在子类中仍然是public,所以子类对象可以调用父类的接口
2. protected继承 protected继承后,父类public和protected成员都变成子类的protected成员了 也就是说子类对象无法调用父类的接口,只能将父类的函数当作子类的内部实现
3. private继承 private继承后,父类public和protected成员都变成子类的private了,它比protected继承更严格。 也就说这些父类的成员只能被继承一次,再继续继承,父类的成员就不可见了。
class A { int i; void f() {} void A() {} // 构造 }
// B 继承 A class B extends A { int j; void f() {} // 重写 void g() {} void B() { // 构造 // 调用父类的构造方法 super(); } }
B b = new B(); b.i // 继承的 b.f() // 重写后的 b.j // 自有的 b.g() // 自有的
Implements 接口实现
Implements是一个类实现一个接口用的关键字,它是用来实现接口中定义的抽象方法
interface接口内部全部是由全局常量和公共抽象方法所组成
对于class而言,extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)
Implements,实现父类,子类不可以覆盖父类的方法或者变量。
即使子类定义与父类相同的变量或者函数,也会被父类取代掉
interface定义一些方法,并没有实现,需要implements来实现才可用
extend可以继承一个接口,但仍是一个接口,也需要implements之后才可用
这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。
// 接口 public interface People { public void say(); }
public interface People2 { public void say2(); }
// 等着被实现 public class Chinese implements People, People2 { public void say() { System.out.println(" 你好!"); } public void say2() { System.out.println(" 你好!"); } }
People chinese = new Chinese() ; chinese.say(); chinese.say();
|