java中关于继承性的规定:
1.一个类可以被多个子类继承
2.java中类的单继承:一个类只能有一个父类
3.子父类是相对的概念
4.子类直接继承的父类,成为直接父类。间接继承的父类成为间接父类
5.子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
若未显示的声明一个类的父类,则此类继承于java.lang.Object
所有的java类(除java.lang.Object外)都直接或间接的继承于java.lang.Object类
package shangGuiGu.day13;
public class demo01 {
private int sex;
private int salary;
public void manOrwoman(){
if(sex==1){
System.out.println("man");
}
else if(sex==0){
System.out.println("woman");
}
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public void employeed(){
if(salary==0){
System.out.println("no job");
}else{
System.out.println("job");
}
}
public demo01(){
}
public demo01(int sex, int salary) {
this.sex = sex;
this.salary = salary;
}
}
package shangGuiGu.day13;
public class demo02 extends demo01 {
private int yearsOld;
public demo02(){
}
public demo02(int yearsOld){
this.yearsOld=yearsOld;
}
public void printAge(){
System.out.println("i am"+yearsOld+"years old");
}
public int getYearsOld() {
return yearsOld;
}
public void setYearsOld(int yearsOld) {
this.yearsOld = yearsOld;
}
}
package shangGuiGu.day13;
public class demo03 {
public static void main(String[] args) {
demo02 kid=new demo02(12);
kid.printAge();
kid.setSalary(0);
kid.setSex(1);
kid.employeed();
kid.manOrwoman();
}
}
方法的重写override/overwrite
在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时。子类的方法将覆盖父类的方法
package shangGuiGu.day13;
public class person {
String name;
int age;
public person(){
}
public person(String name, int age) {
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("eat");
}
public void walk(int distance){
System.out.println("walk"+distance);
}
}
package shangGuiGu.day13;
public class student extends person {
String major;
public student() {
}
public student(String major) {
this.major = major;
}
public void study(){
System.out.println("study"+major);
}
public void eat(){
System.out.println("student eat");
}
}
package shangGuiGu.day13;
public class demo05 {
public static void main(String[] args) {
student s=new student("technology");
s.eat();
s.walk(10);
s.study();
}
}
super 关键词
可以用来调用:属性、方法、构造器
1.在子类的方法或构造器中,通过使用 super.属性或super.方法的方式,显式的调用父类中声明的属性或方法。
2.当子类或父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用 super.属性的方式,表明调用的是父类中声明的属性
特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类被重写的方法时,则必须显式的使用super.方法的方式,表明调用的是父类中被重写的方法
3.super调用构造器时,super(形参列表)的使用必须声明在子类构造器的首行。故在类的构造器中,针对于this(形参列表)或super(形参列表)只能二选一,不能同时出现
4.在构造器的首行,没有显式的声明this(形参列表)或super(形参列表),则默认调用的是父类中空参的构造器
多态性一个事物的多种形态
父类的引用指向子类的对象
person p=new man();
多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法
编译看左边,执行看右边,new谁看谁
多态性的使用前提:1.类的继承2.方法的重写



