四.类的继承

1.为什么需要继承?
1.提高代码的重用性;
2.提高程序扩展性。

2.java继承的语法格式
java继承的关键字是:extends

格式:
public class 子类名 extends 父类名 {

}
注意:java的继承属于单继承。

3.子类能继承到父类的那些方法和属性
1.子类和父类在同一个包下
公有的,受保护的属性和方法能被子类继承访问。

2.子类和父类不在同一个包下
公有的属性和方法能被子类继承访问。

4.方法的重写
满足方法重写的条件:
1.方法名,返回值类型,参数个数以及参数类型都必须要和父类的完全相同。
2.访问修饰符可以大于或者等于父类的访问修饰符。

实现重写后,如何调用方法呢?
你看new关键字后的构造方法是谁的,那么就会优先调用谁的方法。

他们之间存在一个继承关系,如果调用的方法在子类中不存在,那么就会调用父类中
定义的方法。

实现继承后,创建子类的对象,在调用方法的时候,会优先执行子类的方法,如果子类
没有改方法,则调用父类的方法。

5.自动转型
向上转型 自动转型
short s = 10;
int i = s;
向下转型 强制转型
short s2 = (short)i;

如果要使用自动转型就必须要存在继承关系。
格式:
父类 对象名 = new 子类构造函数();
Student stu = new UNStudent();

缺点:如果使用了自动转型,就无法调用子类自己的方法,只能调用父类中已经定义过的方法。

优点:父类包含了子类,所以在使用过程中可以用父类对象名去代替子类的对象,在使用过程中,还是会优先调用子类中的方法,除非子类没有这个方法,才会去调用
父类的方法。

6.多态
多态不是单一的技术点,二是多个技术点的集合。
包含:方法重载,继承,方法重写,自动转型等技术。

例:
Manage.java

package cn.netjava.lesson4;

/**
* 学生管理类
* @author Administrator
*
*/
public class Manager {

/**
* 主函数
* @param args
*/
public static void main(String [] args){

//实例化一个大学生对象
Student un = new UNStudent();
un.setName("张三");
//un.study();
//un.test();


//实例化一个大学生对象
Student stu = new Student();
stu.setName("里斯");
//stu.study();
//stu.test();

//实例化一个大学生对象
Student x = new XStudent();
x.setName("王五");
//x.study();
//x.test();

Teacher tea = new Teacher();
tea.teach(un);
tea.teach(stu);
tea.teach(x);
}
}

Teacher.java

package cn.netjava.lesson4;

public class Teacher {

public void teach(Student un){
un.study();
}

}

Student.java

package cn.netjava.lesson4;

/**
* 学生类
* @author Administrator
*
*/
public class Student {

private String name;//姓名
private int score;//学分

/**
* 给姓名属性赋值的方法
* @param name姓名参数
*/
public void setName(String name){
this.name = name;
}

/**
* 获取姓名属性值的方法
*/
public String getName(){
return name;
}

/**
* 学习的方法
*/
protected void study(){
score++;
System.out.println(name+"学习中,学分是"+score);
}

public void test(){
System.out.println("Student父类");
}
}

UNStudent.java

package cn.netjava.lesson4;


/**
* 定义一个大学生类,该类继承自学生类
* @author Administrator
*
*/
public class UNStudent extends Student {

/**
* 重写父类的学习方法
*/
public void study(){
System.out.println("我是大学生的学习方法!");
}

/**
* 定义一个玩的方法
*/
public void play(){
System.out.println("我打羽毛球!");
}
}

XStudent.java

package cn.netjava.lesson4;

public class XStudent extends Student {

}


练习:
people去看喜剧电影
体现继承和重写,自动转型。

Cinema.java

public class Cinema {
public static void main(String [] args){
Movie mo = new COMovie();
mo.setName("电影(一)");
mo.setStyle("喜剧片");

Movie moo = new ACMovie();
moo.setName("电影(二)");
moo.setStyle("动作片");

People peo = new People();
peo.setName("焦怡雯");
peo.seemovie(mo);
peo.seemovie(moo);

}

}

Movie.java

public class Movie {
private String name;
private String style;

public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}

public void setStyle(String style){
this.style = style;
}
public String getStyle(){
return style;
}

}

People.java

public class People {
private String name;

public void setName(String name) {
this.name = name;

}

public String getName() {
return name;
}

public void seemovie(Movie m) {
System.out.println(name + "看了一部电影" + "电影名:" + m.getName() + "电影类型:"
+ m.getStyle());
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值