Java继承

public class Employee {
	public static String superStr = "SUPERSTR";

	public String test() {
		return "SUPERTEST";
	}

	public String test2() {
		return "SUPERTEST2";
	}
}

public class Manager extends Employee {

	public static void main(String[] args) {
		System.out.println(superStr);// 直接访问父类域
		Manager mgr = new Manager();
		String t1 = mgr.test();// 直接访问父类方法
		String t2 = mgr.test2();// 覆盖父类方法
		System.out.println(t1 + "\n" + t2);
	}

	@Override
	public String test2() {
		return super.test2() + "#test2";
	}
}

父类Employee有public的域和方法,子类Manager覆盖了父类的一个方法。从代码中的注释可清楚地知道:子类可直接访问父类的公有域或方法,但若子类覆盖了父类的域或方法,就按覆盖的本意来。

输出结果:

SUPERSTR

SUPERTEST

SUPERTEST2#test2

简单来说,上面的Manager继承Employee后,它的代码实质上等同于:

public class Manager extends Employee {
	//***********父类域**************************
	public static String superStr = "SUPERSTR";

	public String test() {
		return "SUPERTEST";
	}

	/*public String test2() {
		return "SUPERTEST2";
	}*/
	//***********父类域**************************
	public static void main(String[] args) {
		System.out.println(superStr);// 直接访问父类域
		Manager mgr = new Manager();
		String t1 = mgr.test();// 直接访问父类方法
		String t2 = mgr.test2();// 覆盖父类方法
		System.out.println(t1 + "\n" + t2);
	}

	@Override
	public String test2() {
		return super.test2() + "#test2";
	}
}

继承设计技巧:

1)将公共操作和域放置在超类

2)不要使用受保护的域(protected)

3)使用继承实现"is-a"关系

4)除非所有继承的方法都有意义,否则不要使用继承

5)在覆盖方法的时候,不要改变预期的行为

6)使用多态,而非类型信息

7)不要过多地使用反射

Java继承,布布扣,bubuko.com

时间: 2025-01-14 09:50:02

Java继承的相关文章

java继承和多态

java方法直接调用原理推测 有错误还望指正 当直接调用某对象的某方法时  会更具该对象获取到类信息对象   在从类信息对象中找到该方法 没找到 获取父类信息对象继续查找 找到了执行  jdk距离实现是通过反射还是其它? 如果按以上原理    以下情况解释不通 创建一子类对象  赋值给一父类指针变量  通过父类指针变量掉run方法   run方法在父类或子类中为私有  这种情况调用的是父类的run方法 并非子类的run方法 反射jar包 package extend; import org.ju

Java继承,多态,组合应用

继承:  面向对象的三大特征之一:    是类和类之间的一种拓展关系,是一种从一般到特殊的关系;    格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把super称为父类或者基类(超类)   泛化: 把子类中的共性抽取到父类的过程; 特化: 子类在父类的基础之上,拓展自己特有的状态和特征;    Object: 是所有类的直接父类后间接父类;      class  Student{} 等价于  class  Student extends Object{

Java继承改进

一.java继承改进 首先,多继承的缺点: 1.继承多个父类,父类中方法名相同,产生歧义 2.父类中方法同名,子类未覆盖,也会歧义 所以,java改进,类只能单继承,接口可以多继承 接口中只有抽象方法和静态常量 1.抽象方法只能在实现接口类中实现,调用时调用实现类的方法 2.静态变量在编译期间将确定调用关系了,存在冲突也会在编译的时候提示错误 ,而且引用变量一般直接使用类名或接口名,避免产生歧义. 1.1继承的初始化 继承关系是传递的.如,类C继承类B,类B继承类A,则类C既有从类B继承下来的变

Core Java (十一) Java 继承,类,超类和子类

Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读书笔记(46)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 继承关系 两个类之间存在三种关系: 依赖,uses-a,如果一个类的方法操纵另一个对象,我们就说一个类依赖于另一个类. 聚合(关联),has-a,一个对象包含另外一个对象,聚合关系意味着类A的对象包含类B的对象

JAVA继承时构造函数的问题

今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan { protected int a=4; //构造函数1 Jisuan() { System.out.println("父类的无参数构造函数"); } //构造函数2 Jisuan(int a) { System.out.println("父类的有参数构造函数");

java继承会犯的小错误

注意事项:阅读本文前应该先了解java的继承.本文定位为已经继承基础知识. 一:试图覆盖私有方法 先上代码 1 public class Father { 2 3 private void print() { 4 System.out.println("private print"); 5 } 6 7 public static void main(String[] args) { 8 Father father = new Son(); 9 father.print(); 10 }

java继承时候类的运行顺序问题

子类在继承父类后,创建子类对象会首先调用父类的构造函数,先运行父类的构造函数,然后再运行子类的构造函数,例如以下所看到的: class Father{ public Father(){ System.out.println("I am father"); } } public class Child extends Father{ public Child(){ System.out.println("I am child"); } public static vo

Java 继承中的构造方法

Java 继承中的构造方法 子类可以继承父类的构造方法,并遵循以下原则: 子类构造的构成中必须调用其基类的构造方法.    2.子类可以在自己的构造方法中使用super()调用基类的构造方法. 使用this()调用本类的另外的构造方法. 如果调用super(),必须写在子类构造方法的第一行. 3.如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参的构造方法.    4.如果子类的构造方法中既没有显示的调用基类的构造方法,而基类中又没有无参的构造方法,则编译会出错. 1 cla

Java继承篇总结

继承: 1)概念 把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容.这个关系叫继承. 1.1)定义类时,通过"继承"一个现有的类,子类可以具有父类中的所有属性和方法. 2)Java中如何表示继承呢?格式是什么呢? A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {} 2.1)案例 public class Animal { String name; String color; p