java学习笔记(二十一)继承

 

继承的基本概念:


1.1--继承的基本概念:

先看一下两个类

Person类和Student类

class Person
{
 private String name;
 private int age;
 public void setName(String name){
 this.name=name;
 }
 public void setAge(int age){
 this.age=age;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
};
class Student
{
 private String name;
 private int age;
 private string school;
 public void setName(String name){
 this.name=name;
 }
 public void setAge(int age){
 this.age=age;
 }
 public void setSchool(String school){
 this.school=school;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
    public String getSchool(){
 return this.school;
 }
};


类定义好了,但是这样是否合理呢》

两个类的部分代码是重复的。

但是从实际的角度看,这种实现肯定不好。
这就要使用继承的概念,
class Person
{
 private String name;
 private int age;
 public void setName(String name){
 this.name=name;
 }
 public void setAge(int age){
 this.age=age;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
};
class Student extends Person
{
 //此处不添加任何代码
};
public class ExDemo01
{
 public static void main(String args[]){
 Student stu = new Student();
 stu.setName("张三");
 stu.setAge(18);
 System.out.println("姓名:"+stu.getName()+"年龄:"+stu.getAge());
 }
}

 

 

F:\java>java ExDemo01
姓名:张三,年龄:18

 

可以把父类的内容拿过来在子类中继续使用,这样,子类如果有一些重复的方法,将就不用重复定义了。

 


继承:子类继承父类,扩展已有类的功能。

 

1.2  extends关键字:成为扩展,子类也称为派生类。


class Person
{
 private String name;
 private int age;
 public void setName(String name){
 this.name=name;
 }
 public void setAge(int age){
 this.age=age;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
};
class Student extends Person
{
 //此处添加代码
 private String school;
 public void setSchool(String school){
 this.school=school;
 }
 public String getSchool(){
 return this.school;
 }
};
public class ExDemo01
{
 public static void main(String args[]){
 Student stu = new Student();
 stu.setName("张三");
 stu.setAge(18);
 stu.setSchool("清华大学");
 System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge()+",学校:"+stu.getSchool());
 }
}


结果为:


F:\java>java ExDemo01
姓名:张三,年龄:18,学校:清华大学

F:\java>

 

1.3   继承的限制

 

在java中只允许单继承,不允许多继承。即一个子类只能继承一个父类,

 


class A{

};
class B
{

};
class C extends A,B
{

};


结果为:

F:\java>javac ExDemo02.java
ExDemo02.java:7: 需要 '{'
class C extends A,B{
                 ^
1 错误

 

但是允许多层继承,即一个子类可以有一个父类,一个父类还可以有一个父类。

class A{

};
class B extends A{

};
class C extends B{

};

 

1.4:访问限制

子类是不能直接访问父类的私有成员的,但是子类可以调用父类的非私有方法,但是不能直接调用父类中的私有成员。
class Person
{
 private String name;
 private int age;
 public void setName(String name){
 this.name=name;
 }
 public void setAge(int age){
 this.age=age;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
};
class Student extends Person
{
 //此处添加代码
 public void fun(){
 System.out.println(name);//错误
 }
 
};
public class ExDemo02
{
 public static void main(String args[]){
 Student stu = new Student();
 stu.setName("张三");
 stu.fun();
 }
}

 


F:\java>javac ExDemo01.java
ExDemo01.java:26: 类 ExDemo02 是公共的,应在名为 ExDemo02.java 的文件中声明
public class ExDemo02
       ^
ExDemo01.java:22: name 可以在 Person 中访问 private
        System.out.println(name);//错误
                           ^
2 错误

修改后的代码:

class Person
{
 private String name;
 private int age;
 public void setName(String name){
 this.name=name;
 }
 public void setAge(int age){
 this.age=age;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
};
class Student extends Person
{
 //此处添加代码
 public void fun(){
 System.out.println(getName());//错误
 }
 
};
public class ExDemo01
{
 public static void main(String args[]){
 Student stu = new Student();
 stu.setName("张三");
 stu.fun();
 }
}

 

 

 

 


结果为:
F:\java>javac ExDemo01.java

F:\java>
F:\java>java ExDemo01
张三

F:\java>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值