1 继承  关键字:extends   java没有多重继承

实例

  1. 父类:
  2.  
  3. package unit4;
  4.  
  5. public class Base {
  6. public int publicVarofBase=1;
  7. private int privateVarofBase=1;
  8. int defaultVarofBase=1;
  9. protected void methodOfBase() {
  10. System.out.println("执行父类的方法");
  11. }
  12.  
  13. }
  14.  
  15. 子类:
  16.  
  17. package unit4;
  18.  
  19. public class Sub extends Base{
  20. public void methodOfSub() {
  21. System.out.println("执行子类的方法");
  22. publicVarofBase=2;
  23. defaultVarofBase=2;
  24. privateVarofBase=2;
  25. methodOfBase();
  26. }
  27. public static void main() {
  28. Sub sub =new Sub();
  29. sub.publicVarofBase=3;
  30. sub.privateVarofBase=3;
  31. sub.defaultVarofBase=3;
  32. sub.methodOfSub();
  33. sub.methodOfBase();
  34. }
  35. }

继承的说明:

子类可以继承父类的东西:

1.当子类和父类在同一个包中时,子类继承父类的:public、protected、默认 访问级别的成员变量和成员方法。

2、当子类和父类在不同的包时,子类继承父类:public、protected 访问级别的成员变量和成员方法。

所有的类都直接或间接的继承了java.lang.Object类。

super关键字

super关键字代替匪类对象,通过super可以访问被子类覆盖了的方法或隐藏了的属性。

在一下情况一般会用super关键字:

1 在类的构造方法中,通过super语句调用这个类的父类的构造方法

2 在子类中访问父类的被屏蔽的方法和属性

注意:在子类的构造方法中通过super()条用父类的构造方法,则此调用必须出现在子类构造方法可执行语句的第一句。

如果没有明确地调用父类的构造方法,编译器会自动加一条调用匪类的默认构造方法,所以一般建议对每一个类都给一个默认的构造方法。

方法覆盖和属性隐藏

  1. package unit4;
  2.  
  3. public class SuperClass {
  4. int a;
  5. public SuperClass() {
  6. // TODO Auto-generated constructor stub
  7. a=10;
  8. }
  9. public void printA() {
  10. // TODO Auto-generated method stub
  11. System.out.println("父类中的A:"+a);
  12.  
  13. }
  14.  
  15. }

package unit4;

  1.  

public class SubClass extends SuperClass {
int a;
public SubClass(int a) {
// TODO Auto-generated constructor stub
this.a=a;
}
public void printA(){
System.out.println("父类中的A:"+super.a);
System.out.println("子类中的A:"+a);
}

  1.  

}

package unit4;

public class OverrideDemo {
public static void main(String[] args) {
SuperClass c1=new SubClass(20);
c1.printA();

}

}

父类中的A:10
子类中的A:20

  1.  
  1. package unit4;
  2.  
  3. public class Base {
  4. String var ="Base's Variable";
  5. void method(){
  6. System.out.println("call Base's method");
  7. }
  8.  
  9. }
  10.  

package unit4;

  1.  

public class Sub extends Base{

  1.  

String var ="Sub's variable";
void method(){
System.out.println("Sub's method call");
}
void test(){
String var = "local variable";
System.out.println("var is "+ var);
System.out.println("this .var is "+ this.var);
System.out.println("super.var is "+super.var);
method();
this.method();
super.method();
}
public static void main(String[] args) {
Sub sub =new Sub();
sub.test();
}
}

var is local variable
this .var is Sub's variable
super.var is Base's Variable
Sub's method call
Sub's method call
call Base's method

  1.  

java继承中注意:

1 构造方法不能被继承

2 private类型的成员变量和成员方法不能被继承

3 覆盖方法时不能缩小父类方法的访问权限,但可以扩大

4 覆盖方法时不能抛出比父类方法更多的异常

5 不能将静态方法覆盖为非静态方法,也不能将非静态方法覆盖为静态方法

6 由于私有方法不能继承,所以不存在覆盖问题。

final关键字、abstract关键字

final关键字

修饰的类不能被继承,派生子类

修饰的方法不能被重写

修饰的变量不允许修改

abstract关键字

abstract可以修饰类和方法,分别成为抽象类和抽象方法

抽象类相当于一个半成品,需要子类继承并覆盖其中的抽象方法,这样子类才能创建实例

抽象方法没有实现代码,由子类实现。

使用规则:

1 抽象类中可以没有抽象方法。不管类定义时有没有abstract关键字修饰,只要包含了抽象方法,就自动变为抽象类。

2 没有抽象的构造方法,也没有抽象的静态方法

3 抽象类和抽象方法不能被final修饰符修饰,但是抽象类可以包含final方法

inerface关键字和接口

java的接口中只存在公有抽象的方法和公有静态的常量。

不管是否明确添加相应的修饰符,java编译器都会自动给加上相应的修饰符。

接口可以继承,并且可以多重继承。

通过implements声明自己实现了一个或多个接口

  1. package unit4;
  2.  
  3. import com.sun.java_cup.internal.internal_error;
  4.  
  5. interface Computable {
  6.  
  7. int M=10;
  8. int f(int x);
  9. public abstract int g(int x,int y);
  10. }
  11.  
  12. package unit4;
  13.  
  14. import com.sun.java_cup.internal.internal_error;
  15.  
  16. public class A implements Computable {
  17.  
  18. public int f(int x){return M+2*x;}
  19. public int g (int x,int y){return M*(x+y);}
  20.  
  21. }
  22.  
  23. package unit4;
  24.  
  25. public class B implements Computable{
  26. public int f(int x){return x*x*x;};
  27. public int g(int x,int y){return x*y*M;}
  28.  
  29. }
  30.  
  31. package unit4;
  32.  
  33. import sun.net.www.content.image.gif;
  34.  
  35. public class interfacedemo {
  36. public static void main(String[] args) {
  37. A a=new A();
  38. B b =new B();
  39. System.out.println(a.M);
  40. System.out.println(" "+a.f(20)+", "+a.g(12,2));
  41. System.out.println(b.M);
  42. System.out.println(" "+b.f(20)+" "+b.g(12,2));
  43. }
  44.  
  45. }

接口中所有的方法必须是抽象的,接口中的方法定义默认为public abstract类型的,接口中的成员变量的类型默认为public static final。

接口与抽象类之间的区别:

1 抽象类可有构造方法

2 抽象类中可有普通的成员变量

3 抽象类中可有非抽象的普通方法

4 抽象类中可有静态的方法

5 抽象类中的静态成员变量类型可以任意,接口中的只能是public static final型

6 一个类可以实现多个接口,但是只能继承一个抽象类

java继承机制的更多相关文章

  1. Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)

    继承(inheritance)背后的核心思想是:       bonus = b;    }      } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...

  2. C++ 和Java继承机制的比较

    摘要: C++支持类的多继承,而Java采用类的单继承.C++中的继承成分只有类(模板属于带参数的类,结构和联合是特殊的类),Java中除了类还有接口的继承,而且允许接口的多继承,可以间接地实现类多继 ...

  3. java的继承机制

    这次我想深入探究以下java里类的继承机制.       我们知道,继承是java设计里的一个失败的地方.高司令说过:如果让他重新设计java的话,他会把继承去掉.而java里继承到底怎么了,会这么不 ...

  4. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  5. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  6. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  7. Javascript 构造函数原型继承机制

    我们先聊聊Js的历史,1994年Netscape公司发布了Navigator浏览器0.9班.这是历史上第一个比较成熟的网络浏览器.轰动一时.但是,这个版本的浏览器只能用来浏览,不具备交互功能,最主要的 ...

  8. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  9. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

随机推荐

  1. 【最小路径覆盖】【二分图】【最大流】【Dinic】bzoj2150 部落战争

    裸的最小路径覆盖. 把每个点拆点,变成二分图. 对于可以连边的点对(i,j):i->j'(1); 对于任意一点i,若i点为'.':S->i(1),i'->T(1); 答案为所有'.' ...

  2. 1.9(java学习笔记)object类及toString()与equals()方法

    object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...

  3. java static代码段

    1)java中还有个static代码块的形式,形式为 static {……}.static代码块是类定义的一部分,仅仅在类被初次加载的时候被调用一次,之后再调用不会再加载.那么类什么时候首次被加载呢? ...

  4. Scala高手实战****第20课:Scala提取器、注解深度实战详解及Spark源码鉴赏

    Spark中的源码的提取器和注解 @SparkContext.scala @ volatile 线程专用 保证线程间共享内容的一致性 @volatile private var _dagSchedul ...

  5. 权限管理-RBAC

    (一)RBAC 通过用户与角色关联,角色与操作的关联实现用户与操作的关联 (二)权限细分 (三)数据库设计 (四)程序设计 (五)权限与应用程序 (1)应用URL实现程序权限控制 (2)应用code实 ...

  6. iOS 文字渐变色

    // 创建UILabel UILabel *label = [[UILabel alloc] init]; label.text = @"我是渐变的label"; [label s ...

  7. 使用ReadOnlyCollection创建只读集合

    转载:http://www.cnblogs.com/abatei/archive/2008/02/04/1064102.html 使用泛型创建只读集合 问题 您希望类中的一个集合里的信息可以被外界访问 ...

  8. pandas判断缺失值的办法

    参考这篇文章: https://blog.csdn.net/u012387178/article/details/52571725 python pandas判断缺失值一般采用 isnull(),然而 ...

  9. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.5.安装oracle11gr2 database 软件与创建数据库

    3.5.安装oracle11gr2 database 软件与创建数据库 3.5.1.安装Oracle 11gr2 Database 以oracle 用户登录到节点一,切换到软件安装目录,执行安装. 在 ...

  10. linux上虚拟显示器和火狐浏览器的使用学习记录

    Ubuntu 14.04 sudo apt-get firefox sudo apt-get install python-pip sudo apt-get install xvfb# xserver ...