Java继承
继承的概念
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
extends关键字
1)通过extends关键字可以实现类的继承
2)子类(sub class)可以继承父类(Super class)的成员变量和成员方法,同时也可以定义自己的成员变量和成员方法。
3)Java语言不支持多重继承,一个类只能继承一个父类,但一个父类可以有多个子类
方法重写和方法重载的区别:
/**
* 方法重写和方法在重载:
* 重写和重载的格式基本相同,都是方法名相同,
* 重写和重载的区别:
* 1)方法重写发生载同一个类里面,方法重载发生在子类和父类两个类中
* 2)方法重写需要方法名相同而参数列表不同,返回值类型、权限修饰符可以相同也可不同;
* 而方法的重载方法名相同参数列表相同,返回值类型相同,权限修饰符父类大于或等于子类;
*/
重写中使用super关键字
子类在重写父类的方法是,可以通过super关键字调用父类的版本,super.f,这样的语法通常用于子类重写方法在父类方法的基础之上进行功能扩展。
父类的对象指向子类的引用
代码:
package extends0;
public class Super0 {
//Super类的成员属性
public int value;
public String fathername="玉皇大帝";
public int age;
private String gender="男";//假设玉皇大帝只能生男孩
public void f(){
System.out.println("这是父类的f方法");
}
public String setGender(String gender){
return gender;
}
public String getGender(){
return gender;
}
//Super类的成员方法
public void playChild(){
System.out.println("爸爸可以打孩子哦!");
}
public void somking(){
System.out.println("爸爸可以掌管太上老君哦!");
}
}
******************************Java文件分界线**********************************
package extends0;
public class Child1 extends Super0 {
public int num;//子类不加权限修饰符默认为私有的private
public void g(){
System.out.println("这是子类的g方法");
}
/**
* extends关键字:
* 1) 子类继承父类可通过extends关键字继承
* 2) 子类可以通过extends关键字继承父类的成员便改良和成员方法,
* 能够改变父类的成员变量的值和成员方法,改变父类成员方法的行为叫做方法的重写
* 也可自己定义父类没有成员变量和成员方法,
* 3)继承只能单向传递,一个子类不能有多个父类,而一个父类可以有多个子类。
* "class not extend mutiply class"
*/
/**
* 父类playaChila方法的重写
*/
@Override
public void playChild() {
System.out.println("爸爸最好不要打孩子");
super.playChild();
}
/**
* super关键字的使用:
* super是子类重写父类方法是出现的关键字,通过super.fatherMethod()方法可以
* 调用父类方法的模板,在子类方法重写父类方法的时候,用到super关键字就相当于
* 子类对父类方法的扩展。
*
*/
public void sum(){
System.out.println("成绩和为:100");
}
private void sum(int a){
System.out.println("输入进来的值为:"+a);
}
/**
* 方法重写和方法在重载:
* 重写和重载的格式基本相同,都是方法名相同,
* 重写和重载的区别:
* 1)方法重写发生载同一个类里面,方法重载发生在子类和父类两个类中
* 2)方法重写需要方法名相同而参数列表不同,返回值类型、权限修饰符可以相同也可不同;
* 而方法的重载方法名相同参数列表相同,返回值类型相同,权限修饰符父类大于或等于子类;
*/
}
******************************Java文件分界线**********************************
package extends0;
public class Child extends Super0 {
public Child(){
}
}
******************************Java文件分界线**********************************
package extends0.test;
import extends0.Child1;
import extends0.Super0;
public class T1 {
public static void main(String[] args) {
//创建子类对象
Child1 child1 = new Child1();
//访问子类继承的性别值
System.out.println(child1.getGender());
//调用子类重写父类的playchild()方法
child1.playChild();
}
}
******************************Java文件分界线**********************************
package extends0.test;
import extends0.Child;
import extends0.Child1;
import extends0.Super0;
import org.junit.Test;
public class T2 {
/**
* 测试父类的引用指向子类的对象
*/
@Test
public void t1(){
Super0 child1 = new Child1();
System.out.println(child1.fathername);
}
@Test
public void t2(){
/**
* 上转型对象:
* 把子类对象赋值给父类的应用叫做上转型对象
*/
Super0 super0 = new Super0();
Super0 child = new Child();
Super0 child1 = new Child1();
Super0 child2 = new Child2();
/**
* 类多态的定义:
* 一个类有多个子类的形式叫做类的多态,多态是是一个类被很多个类继承
*/
super0.value=1;
super0.f();
// child1.num=9;//父类的引用对象指向子类
// child1.g();
/**
* 父类的引用对象指向子类: 在上转型对象中,子类自己特有的成员变量和方法不能通过创建的对象来调用
* 否则会出现 can't resolve symbol 错误
*/
}
}
******************************Java文件分界线**********************************
package extends0.test;
import extends0.Super0;
public class Child2 extends Super0 {}
多态
一个父类的拥有多个子类的表现叫做多态;
我们可以把同一个类拥有不同的子类的这个过程叫做多态,
- 也就是,一个类拥有多个子类的表现形式,具体功能
- 主要是看子类,因为子类重写了父类的方法,父类的
- 不同子类所重写的父类的方法的逻辑不一样导致,方法的
- 运行结果不一样,运行结果不一样就表示该类的子类对象
- 可以扮演不同的角色,这就是多态的运用。
*/