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());
}
}
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());
}
}