继承&多态&接口&抽象
一、继承
继承:子承父业
子类 继承 父类的财产!
继承使用:extends关键字来实现!
继承的作用:通过父类封装代码,子类通过继承之后,就可以不用编写 重复代码
提高代码的复用性
class Animal{} class Person extends Animal{} class Pig extends Animal{} class Dog extends Animal{} class Cat extends Animal{} ---------------------------- class Flower{} class Rose extends Flower{} class JuHua extends Flower{} class SunFlower extends Flower{}
继承:一定要满足 is - a 是一种;不能胡乱的继承!
Java是一种单继承语言,每个类最多只能拥有一个父类!
二、重写
比如:toString()
//@Override 表示:下面的方法,重写了它父亲的方法 @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + '}'; }
重写,一定要发生在继承之间! 快捷健:Alt + Insert
三、多态
多态:相同的行为,不同的实现
具体的做法:父类的引用 -> 子类的实现 ,接口的引用 - > 实现类的实现
编程时:调用方法时,看左边的类,是否有定义方法或属性!
运行时:调用方法时,看右边的对象,是否有定义方法或属性!
四、抽象类
抽象类:一个具有抽象方法的类!
抽象方法:没有方法体的方法,换个说法,没有办法实现的方法!
抽象类的特点:
1、抽象方法所在的类,是抽象类;抽象类中,不一定有抽象方法!
2、抽象类,不能被实例化
3、抽象类除了可以放置抽象方法,以前的属性,普通方法,构造器仍旧可以存在
4、类如果不想实现抽象类中的方法,唯一的办法:把自己变成抽象类
五、接口
接口:USB,Type-C , 网线
作用:扩展功能
接口,是一种特殊的类,它不是通过class来定义,它通过interface来定义!
这种特殊的类,可以给我们的程序,扩展新的功能!
public interface Smokeable { void smoke(); } public interface Flyable { // public abstract 可以省略 void fly(); } public interface Swimable { void swim(); } public class Human implements Flyable,Smokeable,Swimable { //接口可以多实现 } public class ChineseHuman extends Human{ }
接口可以多实现,也可以多继承!
public static void main(String[] args) { //多态:相同的行为,不同的实现 //实现方式:父类的引用 -> 子类的实例,接口的引用 -> 实现类的实例 Mergeable human = new Human(); human.swim(); } public class MainEnter { public static void main(String[] args) { //接口的引用 -> 实现类的实例 List<String> list = new ArrayList<>(); } }
总结:
1、接口的作用:给程序扩展新的功能
2、接口&类之间是 一种实现关系,而且一个类 可以同时实现多个接口!
3、接口&接口之间是 一种继承关系,而且一个接口 可以通过继承多个接口!
接口:在JDK1.7时,只能放置抽象方法!
六、重载
重写:子类 重新编写 父类的方法!
重载:发生在同一类中,相同的方法名,不同的参数列表!
public class MathUtil{ public static int add(int a,int b){ return a + b; } public static double add(double a,int b){ return a + b; } public static double add(int a,double b){ return a + b; } public static double add(double a,double b){ return a + b; } }
七、三目运算符
格式:数据类型 变量 = (布尔条件) ? 返回满足条件的值 : 返回不满足条件的值;
替代:简单的 if -else
//三目运算符 三元运算符 String str = (i == 0) ? "女" : "男"; boolean flag = (条件) ? true : false; double dou = (条件) ? 第1个double值 : 例外一个double值;
小案例:
public class MainEnter { public static void main(String[] args) { System.out.println("输入第1个数"); int i = new Scanner(System.in).nextInt(); System.out.println("输入第2个数"); int j = new Scanner(System.in).nextInt(); //问:i > j 吗? 大,就返回i,否则就返回j; int a = (i > j) ? i : j; System.out.println(a); } }
总结
1、继承:子承父业,作用:解决重复代码的问题
2、Java中的继承是属于单继承,使用extends来进行继承!
3、父类中的方法,不满足当前的需求,可以进行重新编写,也就是 重写
4、多态:相同的行为,不同的实现;具体方式:父类的引用 -> 子类的实例;接口的引用 -> 实现类的实例;
5、抽象类:一个具有抽象方法的类;但是:抽象类不一定具有抽象方法!
6、抽象类除了可以写抽象方法之外,还可以编写:属性,普通方法,构造器
7、接口的作用:扩展/丰富 程序的类结构!接口既可以多继承,也可以多实现!
8、接口使用interface定义,使用implements 来进行实现!
9、重载:同一个类中,相同的方法名,不同的参数列表