1. 构造方法
面向对象的特征
1. 封装
2. 继承
2.1 重写(两等两小一大原则)
- 两等
父子类中出现签名一致的方法,java将先会按照重写来看待,如果发现方法签名一致,但返回值不一致就报和父类方法返回值不匹配的编译异常
不要和重载混了,方法的签名还包括括号中的参数,子类声明创建的对象,编译时就能调用父类的方法,因为有extedns关键字在好确定。但父类声明创建子类对象就不一样了,因为new在编译时还没执行,不知道这个方法该调用谁的:
- 两小
子类抛出的异常要小于父类 - 一大
2.2 super
package cn.tedu.extendsx;
public class ExtendsDemo3 {
public static void main(String[] args) {
//
Pig p=new Pig();
p.eat();
}
}
//动物类
class Animal{
//public Animal(){}
public Animal(String name){}
//方法
public void eat(){
System.out.println("在悠闲的吃东西。。。");
}
public void sleep(){
System.out.println("在悠闲的睡觉。。。");
}
}
//猪类
class Pig extends Animal{
//子类中每种形式的构造方法都会默认调用父类的无参构造
//父类对象优先子类对象存在
public Pig(){
//调用父类的无参构造
//super语句---在子类中的构造方法调用父类的构造方法
//首行
//super();
super("lili");
}
public Pig(String name){
this();
}
public void eat(){
System.out.println("在呼哧呼哧的吃...");
System.out.println("吃饱了。。。想睡觉。。。");
//所有的非静态的方法都可以通过对象调用
//this---代表当前类的对象
//父类对象调用
//super---代表父类的对象的引用
//父子类对象?
super.sleep();
}
}
3. 多态
- 注意如果是以下情况,就会分辨不清了,编译时报错
- 注意此处是两种,重写(编译时并不知道是父类的还是子类的方法)算一种,向上造型算一种