您的位置:首页 > 编程语言 > Java开发

Java菜鸟学习笔记--面向对象篇(七):简易继承

2013-07-16 18:49 633 查看

什么是继承?

现实世界中,儿子继承老爹的东西。
面向对象世界里,一个类(子类)继承另外一个类(父类)的数据成员和方法。
Java只支持单继承,一个儿子只有一个爹。而C++支持多继承。

为什么要用继承?

面向对象的终极目标就是要减少应用程序中的重复代码,继承也可以减少应用程序中的程序代码
便于修改

继承的语法表示是什么?

1.用Son类继承Person类,表示出继承成功

class Person{

Strsing name;
int age;

public void eat(){

System.out.println("我在吃饭");
}
public void introduce(){

System.out.println("你好我的名字: "+name+"我的年龄:"+age);
}

}
class Son extends Person{

//Son 为Person的子类
//Son  内未定义任何方法
}
public class test{

public static void main(String[] agrs){
//用Son测试是否继承了Person类。
Son yanggan=new Son();
yanggan.name="yanggan";
yanggan.age=21;
yanggan.introduce();

/*输出
你好我的名字: yanggan我的年龄:21
*/

}

}


生成子类的过程?

class Person{

String name;
int age;
Person(){
System.out.println("Person 无参构造函数");
}
Person(String name,int age){
this.name=name;
this.age=age;
System.out.println("Person 有参构造函数");
}
public void eat(){

System.out.println("我在吃饭");
}
public void introduce(){

System.out.println("你好我的名字: "+name+"我的年龄:"+age);
}
public static void talk(String word){
System.out.println(word);

}
}
//Person的子类 Son
class Son extends Person{

String school;
//1.子类Son不能继承父类构造函数!
//2.在子类的构造函数中,必须调用父类的构造函数!!为什么?
/*

*/
Son(){
super();//3.不写出来,编译器自动添加这行代码
//super表示调用父类的构造函数
System.out.println("Son 无参构造函数");
}
Son(String name,int age,String school){
//4.头两行为重复代码,如何解决?--能调用父类构造函数就好了
//this.name=name;
//this.age=age;

super(name,age);//5.super调用父类的构造函数,又参数决定用哪一个!
this.school=school;

}
}
public class test{

public static void main(String[] agrs){
//创建Son的对象
Person.talk("---------new Son()-------------");
Son yanggan=new Son();
Person.talk("----------new Son(有参数)--------");
Son wangtao=new Son("wangtao",21,"HUT");
wangtao.introduce();//6.怎么打印学校呢?

}

}


父类Private方法的继承问题

1.测试声明为private的超类方法,在子类中用复写的语法写会怎么样?

//1.测试声明为private的超类方法,在子类中用复写的语法写会怎么样?
package me.privateandfinal;
class Father{

private void eat(){

System.out.println("老爹在吃饭");
}
private final void sleep(){
System.out.println("老爹在睡觉");
}

}
class Son extends Father{

//~ @Override
//~ public  void eat(){
//~ System.out.println("这算复写老爹的方法");
//~ }//编译错误
/*输出:
: method does not override or implement a method from a supertype
@Override
^
1 error
*///编译器指出并未发现有复写父类方法,所以void eat()不算复写。即这是一个新方法

private final void sleep(){
System.out.println("儿子在睡觉");
}//还是新方法

}
public class TestPrivateandFinal{

public static void main(String[] arga){

Son coco=new Son();

//coco.eat();//对于Son类,这个新方法可以访问,与父类的eat()方法无半毛钱关系

}

}


作者:YangGan

出处:http://blog.csdn.net/incyanggan

本文基于署名
2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: