一.面向对象编程的三大特征
1.1 封装
细节隐藏,系统安全性,整体考虑
1.2 继承
1.3 多态
二.继承
2.1 需求
创建图形化固体,类似于普通window窗口
package ff20240421;
import javax.swing.*;
public class MyWindow extends JFrame {
public MyWindow(){
//设置窗体的大小
setBounds(100,100,400,300);
this.setTitle("演示继承窗体");
this.setVisible(true);
}
public static void main(String[] args) {
MyWindow myWindow = new MyWindow();
}
}
2.2 什么情况下可以使用继承
IS A
A is a B
2.3 访问控制符
protected-------继承(包)
private < 默认(不写)<protected(继承) < public
2.4练习
设计一个动物类(animal),有一个move(),在写三个动物,Bird,Snake,Fish
Animal
package ff0512.Anmial;
public class Animal {
public void move(){
System.out.println("可以移动……");
}
}
package ff0512.Anmial;
import ff0512.Anmial.Animal;
public class Bird extends Animal {
}
package ff0512.zuoye;
import ff0512.Anmial.Animal;
public class Snake extends Animal {
}
package ff0512.Anmial;
import ff0512.Anmial.Animal;
public class Fish extends Animal {
}
package ff0512.Anmial;
import ff0512.zuoye.Snake;
public class Test {
public static void main(String[] args) {
Animal a =new Animal();
a.move();
Fish f = new Fish();
f.move();
Animal s= new Snake();
s.move();
//代表测试的对象是不是子类
//子类 instanceof 父类
System.out.println(s instanceof Animal);
}
}
2.5方法重写
2.5.1方法重载
在一个类中,方法名称完全一样,参数的类型或者个数不一样
2.5.2方法重写(覆盖)
继承关系
package ff0512.Anmial;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import ff0512.Anmial.Animal;
public class Bird extends Animal {
@Override //覆盖
public void move() {
System.out.println("早起的鸟儿有虫吃……");
}
}
三.多态
具有继承关系
1.父类引用指向子类对象 Animal a=new Dog(); 保证类型一致
2.子类对父类的方法进行重写。
3.在不同时刻调用调用相同的方法,结果不同
package ff0512.transport;
public abstract class Vehicle {
public abstract void transport();
}
package ff0512.transport;
public class Plant extends Vehicle {
@Override
public void transport() {
System.out.println("坐飞机^-^");
}
}
package ff0512.transport;
public class TestPlant {
public static void main(String[] args) {
Vehicle v = new Plant();
v.transport();
}
}
四.动物模型的问题
1.Animal中的方法
实际上没有多大的问题,被子类的方法重写
设计的目的:如果子类不重写。 提供一个规范
4.2抽象类
特点:类,不能被实例化,Acaculator c = new MyCaculator();
abstract
public abstract class ACaculator{
public abstract double add(double a,double b);
public abstract double minus(double a,double b);
public abstract double mul(double a,double b);
public abstract double divide(double a,double b);
public abstract int pow (int a, int b);
}
五.接口(interface)
java的继承---》单继承,
多继承---》接口
abstract class --- interface
extends ----- implements
package com.ffyc.sys;
import java.util.Date;
/**
* interface = abstract class
*/
public interface ICaculator {
int add(int ... a);
double minus(double a, double b);
double mul(double a, double b);
double divide(double a, double b);
int pow(int a, int b);
int max(int...a);
int second(int... a);
String sort(int a, int b , int c);
Date parse(String d);
/**
* 将一个整数转换为二进制字符串返回
* @param a
* @return
*/
String toBinary(int a);
/**
* 算出第几个斐波拉切数列的值
* @param n
* @return
*/
int fac(int n);
}