8.2 类继承定义

Posted 盘思动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.2 类继承定义相关的知识,希望对你有一定的参考价值。

// class 子类 extentd 父类 
// 很多情况下: 会把子类称为派生类,把父类称为超类(superCall)
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 HelloWorld 
    public static void main(String args[])
        Student stu = new Student();
        stu.setName("李寻欢");// 子类可以直接调用父类中方法
        stu.setAge(22);
        stu.setSchool("清华大学");
        System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge() + ",学校:" + stu.getSchool());
    



SpringBean 定义继承

Bean定义继承

bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。子bean的定义继承副定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。

Spring Bean定义的继承与Java类的继承无关,但是继承的概念是一样的。你可以定义一个父bean的定义作为模板和其他子bean就可以从父bean中继承所需的配置。

当你使用基于XML的配置元数据时,通过使用父属性,指定父bean作为该属性的值来表明自bean的定义。

Bean.xml:在该配置文件中我们定义有两个属性message1,message2的“helloworld“bean,然后,使用parent属性把”helloIndia“bean定义为”helloworld“的孩子。这个字bean继承message2的属性,重写message1的属性,并且引入一个属性message3.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
     <bean id="helloworld" class="com.tuorialsponit.HelloWorld">
         <property name="message1" value="Hello world"/>
         <property name="message2" value="Hello Second World"></property>
     </bean>
     
     <bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="helloworld">
         <property name="message1" value="hello India"></property>
         <property name="message3" value="Namaste India"></property>
     </bean>
 </beans>

HelloWorld.java的内容:

package com.tuorialsponit;

public class HelloWorld {
    private String message1;
    private String message2;
    public String getMessage1() {
        return message1;
    }
    public void setMessage1(String message1) {
        this.message1 = message1;
    }
    public String getMessage2() {
        return message2;
    }
    public void setMessage2(String message2) {
        this.message2 = message2;
    }
    
}

 

HelloIndia.java:

package com.tuorialsponit;

public class HelloIndia {
    private String message1;
    private String message2;
    private String message3;
    public String getMessage1() {
        return message1;
    }
    public void setMessage1(String message1) {
        this.message1 = message1;
    }
    public String getMessage2() {
        return message2;
    }
    public void setMessage2(String message2) {
        this.message2 = message2;
    }
    public String getMessage3() {
        return message3;
    }
    public void setMessage3(String message3) {
        this.message3 = message3;
    }
}

MainApp.java内容:

package com.tuorialsponit;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld obj1 = (HelloWorld) context.getBean("helloworld");
        System.out.println(obj1.getMessage1());
        System.out.println(obj1.getMessage2());
        
        System.out.println("-----------------------");
        HelloIndia obj2 = (HelloIndia) context.getBean("helloIndia");
        System.out.println(obj2.getMessage1());
        System.out.println(obj2.getMessage2());
        System.out.println(obj2.getMessage3());
//        String message = obj.getMessage();
//        System.out.println(message);
    }
}

执行结果:

在这里你可以观察到,我们创建”helloIndia“bean的同时并没有传递message2,但是由于Bean定义的继承,所以它传递了message2.

Bean定义模板

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="beanTemplate" abstract="true">
        <property name="message1" value="Hello world"/>
         <property name="message2" value="Hello dddddddddSecond World"></property>
         <property name="message3" value="Hello world1"/>
    </bean>
     <bean id="helloworld" class="com.tuorialsponit.HelloWorld">
         <property name="message1" value="Hello world"/>
         <property name="message2" value="Hello Second World"></property>
     </bean>
     
     <bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate">
         <property name="message1" value="hello India"></property>
         <property name="message3" value="Namaste India"></property>
     </bean>
 </beans>

父bean(abstract)自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。当一个定义是抽象的,它仅仅作为一个纯粹的模板bean定义来使用,充当子定义的父定义使用。

以上是关于8.2 类继承定义的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出之C++中的继承

asp.net zero 8.2 学习-2-创建一个页面

8.2java 方法重写和属性重写

第八周 类与对象

韩顺平循序渐进学java 第08讲 this.类变量

第8.2章