2018.1.13面向对象之继承复习

Posted 贰零一八

tags:

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

class Rect{
	int width=2, height=6;
	void setWidth(int width){
		this.width=width;
		//代码1 将参数的值赋给成员变量width
	}
	void setHeight(int height){
		this.height=height;
		//代码2 将参数的值赋给成员变量height
	}
	int getArea(){
		return width*height;
	}
}
public class E{
	public static void main(String[] args) {
		Rect rect=new Rect();
		rect.setWidth(5);
		rect.setHeight(6);
		System.out.println(rect.getArea());
	}
}

  

  

运行结果为30

                                                       //如果去掉this,则结果为12;  ??这是疑惑??

 

 

 

 

javaBean

javaBean:可以重复使用的软件组件。javaBean是一个java类,通过封装方法和属性,成为了具有某种功能或处理某种业务的对象,简称Bean。

特点:有点像设计模式的概念,可以重复利用,易维护,跨平台。

说明:为了让用这个Bean的应用程序构建工具知道Bean的属性和方法,只需在类的方法上遵守如下规则就行。

1.为这个类提供一个无参的共有的构造方法。

2.把所有的属性定义为私有的。

3.为每个属性提供共有getter(获得属性值)和setter(修改值)的方法。

/*定义一个javaBean*/
public class JavaBeanTest{
    private String name;
    private String age;
    public JavaBeanTest(){
        //不带参数的构造方法
    }
    //每个属性公有的setter和setter方法
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age=age;
    }
}

是先设置set方法还是get方法?有区别?有讲究没有?这是没有讲究的

为什么set方法中有参数和数据类型?而get方法无参数?

 

类的继承:在现有类的基础上构建子类,可以延伸,还可以覆盖,还可

               以向上或向下转型。

class Employee{
    private String name;
    private int age;
    private double salary=3000;//Employee类的成员属性的设置

    public Employee(String name, int age, double salary){
        this.name=name;
        this.age=age;
        this.salary=salary;//构造器的参数设置,方便于参数的传递,把形参的值传给成员变量
    }
    public Employee(){

    }//为什么要空的构造器?这个代码应该可以省略

    public double getSalary(){
        return salary;
    }
    public double getMothlyIncome(){
        return salary;//获得值
    }    

}

class Manager extends Employee{
    private double bonus=1500;
    public Manager(){

    }
    //设置子类特有的方法
    public void setBonus(double bouns){
        this.bonus=bonus;//设置奖金
    }
    public double getBonus(){
        return bonus;//获取并返回奖金
    }
}

public class InheritanceTest{
    public static void main(String[] args) {
        Manager manager=new Manager();
        double sal=manager.getSalary();
        System.out.println("经理的月薪为"+sal);
        System.out.println("经理的奖金为"+manager.getBonus());
    }
}

/*说明:

1.子类只能获取父类非私有的

2.子类不拥有父类的构造器

3.父类不拥有子类所特有的属性和方法

*/

 

继承的优点:

1.可以创建更多的特殊类型   2.提高代码的重用性     3.易于后期维护

 

使用继承的规则:

1.满足is-a关系,而组合满足has-a(   找个例子!!)

2.把通用的属性和操作发到超类中

3.除非使用的方法有意义,否则不使用继承。

 

组合是指在新的类中创建原有类的对象,重复利用已有类的功能

比如汽车是交通工具的一种,则是继承。一个汽车有多个轮胎,则是组合。

class Verhicle{
}
class Car extends Verhicle{
}
//继承

class Tire{
}
class Car extends Verhicle{
private Tire t=new Tire;
}
//组合

在java中组合用的比继承多(接口和组合的方式比用继承有更好的可扩展性)

 

super关键字

作用:通过子类调用父类的构造方法,就用到super关键字,特别是父类私有的,还有被覆盖的情况下(明天找个例子)。

语法格式:super(参数值列表)

public Manager extends Employee{

private double blnus=1500;

public Manager(String name,int age,double salary,double bouns){

super(name,age,salary);

this.bonus=bonus;

}

public void setBounds(double blnus){

this.bouns=bouns;

}

public void getBounds(){

return bonus;

}

}

}

 

以上是关于2018.1.13面向对象之继承复习的主要内容,如果未能解决你的问题,请参考以下文章

Python--面向对象的程序设计之多继承组合应用开发软件规范

面向对象之笔记三-------------- 原型链

JS高级---复习

Java面向对象复习

Java面向对象复习

复习----面向对象