1.继承:继承相同的方法和属性,被继承的叫父类,继承的叫子类
目的是为了避免相同的属性和方法重复定义,占用大量内存空间
能继承什么?继承的是父类中的非私有的方法和属性(非private类型的),而且父类的构造函数也不能被继承
public class People
{
// 属性
String name;
protected String subject;
int age;
public String sex;
//父类函数
public void eat()
{
System.out.println("父类吃饭的方法!!!");
}
}
父类People中有姓名、年龄、性别这三个公用属性和“吃”这个公共方法,可以被子类(学生)(老师)继承
public class Student extends People
{
//函数
public void study(Teacher tea){
System.out.println(subject+"专业"+name+"学生正在听"+tea.name+"老师上课!");
}
}
public class Teacher extends People
{
//定义方法
public void teach(Student stu){
System.out.println(name+"老师正在教"+stu.name+"学习"+subject);
}
}
在(学生)(老师)子类中,都没有定义姓名、科目等属性,但在父类(People)已经定义,然后通过extends关键字从父类继承,才不会运行出错
2.方法重写:对从父类继承过来的方法进行一下调整改进
public class People
{
// 属性
String name;
protected String subject;
int age;
public String sex;
//父类函数
public void eat()
{
System.out.println("父类吃饭的方法!!!");
}
}
父类中有一个吃饭的方法,是输出“父类吃饭的方法!!!”;
public class Student extends People
{
//函数
public void study(Teacher tea)
{
System.out.println(subject+"专业"+name+"学生正在听"+tea.name+"老师上课!");
}
public void eat()
{
System.out.println("学生类吃饭的方法!");
}
}
学生这个子类中继承了父亲的eat方法,但是进行了改动,改成输出“学生类吃饭的方法!”,这就是方法的重写
方法的重载和重写是不同的
重载:存在于同一个类中,方法名相同,参数类型、参数个数不同,或者参数顺序不一样
重写:存在于子类中,方法名相同、返回类型相同、访问权限只能扩大不能缩小、参数必须相同
public class Student extends People
{
//函数
public void study(Teacher tea)
{
System.out.println(subject+"专业"+name+"学生正在听"+tea.name+"老师上课!");
}
public String eat(String a)
{
System.out.println("学生类吃饭的方法11111!");
return "aa";
}
}
这个方法就是重载,方法名相同,但是参数类型不同
3.自动转型:将子类转为父类
自动转型之后,如果子类重写了父类的方法,调用的必然是重写后的,
否则调用自己的方法,且不能调用子类除了重写以外的其他方法。
people stu=new student;(定义一个父类的人是一个新的学生)
people tea=new teacher(定义一个父类的人是一个新的老师)
在输出时,应遵循上述规则
tea.eat();//老师吃
stu.eat();//学生吃
peo.eat();//父类吃
4.多态
同一个类型的多个对象调用同一个方法,执行不同的内容,结果不一样,这种情况叫多态