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

实例

父类:

package unit4;

public class Base {
public int publicVarofBase=1;
private int privateVarofBase=1;
int defaultVarofBase=1;
protected void methodOfBase() {
System.out.println("执行父类的方法");
} } 子类: package unit4; public class Sub extends Base{
public void methodOfSub() {
System.out.println("执行子类的方法");
publicVarofBase=2;
defaultVarofBase=2;
privateVarofBase=2;
methodOfBase();
}
public static void main() {
Sub sub =new Sub();
sub.publicVarofBase=3;
sub.privateVarofBase=3;
sub.defaultVarofBase=3;
sub.methodOfSub();
sub.methodOfBase();
}
}

继承的说明:

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

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

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

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

super关键字

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

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

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

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

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

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

方法覆盖和属性隐藏

package unit4;

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

package unit4;


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);
}


}

package unit4;

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

}

}

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

 
package unit4;

public class Base {
String var ="Base's Variable";
void method(){
System.out.println("call Base's method");
} }

package unit4;


public class Sub extends Base{


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

 

java继承中注意:

1 构造方法不能被继承

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

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

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

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

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

final关键字、abstract关键字

final关键字

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

修饰的方法不能被重写

修饰的变量不允许修改

abstract关键字

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

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

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

使用规则:

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

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

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

inerface关键字和接口

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

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

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

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

package unit4;

import com.sun.java_cup.internal.internal_error;

interface Computable {

    int M=10;
int f(int x);
public abstract int g(int x,int y);
} package unit4; import com.sun.java_cup.internal.internal_error; public class A implements Computable { public int f(int x){return M+2*x;}
public int g (int x,int y){return M*(x+y);} } package unit4; public class B implements Computable{
public int f(int x){return x*x*x;};
public int g(int x,int y){return x*y*M;} } package unit4; import sun.net.www.content.image.gif; public class interfacedemo {
public static void main(String[] args) {
A a=new A();
B b =new B();
System.out.println(a.M);
System.out.println(" "+a.f(20)+", "+a.g(12,2));
System.out.println(b.M);
System.out.println(" "+b.f(20)+" "+b.g(12,2));
} }

接口中所有的方法必须是抽象的,接口中的方法定义默认为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. 【博弈论】【SG函数】bzoj1777 [Usaco2010 Hol]rocks 石头木头

    仅有距根节点为奇数距离的节点的石子被移走对答案有贡献,∵即使偶数的石子被移走,迟早会被再移到奇数,而奇数被移走后,不一定能够在移到偶数(到根了). 最多移L个:石子数模(L+1),比较显然,也可以自己 ...

  2. Problem A: 零起点学算法16——鸡兔同笼

    #include<stdio.h> int main() { int n,m,a,b; while(scanf("%d %d",&n,&m)!=EOF) ...

  3. golang的reflect

    引用自 http://www.jb51.net/article/115002.htm 和 C 数据结构一样,Go 对象头部并没有类型指针,通过其自身是无法在运行期获知任何类型相关信息的.反射操作所需要 ...

  4. HttpClient 处理中文乱码

    HttpClient 请求的中文乱码问题 相关类库: commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.ja ...

  5. svn的安装(整合apache、ldap)包括错误解决post commit FS processing had error

    2013年12月5日 admin 发表评论 阅读评论 以下是centos环境下,以yum安装apache及其相关软件.svn使用源码包编译,使用官网最新的1.8.5版本. 一.安装apache ope ...

  6. 事务的实现就是利用数据库锁(行锁,表锁等),且db上锁,都是在操作之前上锁

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据 ...

  7. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...

  8. 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到

    spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.

  9. @import url(../image/css)的用法

    1.@import url(../image/css);可以加载css文件2.@import url(../image/css);可以写在html里加载css文件,也可以写在css文件里加载css文件 ...

  10. Java开发中的23种设计模式详解 【转】

    创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问 ...