1.多态
多态:一个事物具有多种形态。
多态性:向不同的对象发送同一个消息,不同的对象会产生不同的行为(方法)。
重写/覆盖:子类可以重写父类的方法 子类重写的方法的访问权限应>=父类的方法。
重载:相同的一个方法名,不同的参数,在参数类型、参数顺序、参数个数中至少有一个不同。如 add(int float)与add(float int)重载, add(int float)与add(int int)也是重载。
实例:
class Employee{//员工类(父类)
String name;//定义name成员变量
int salary;//定义salary成员变量
public Employee(){//定义一个无参构造函数
}
public Employee(String name,int salary) {//定义一个含有两个参数的构造函数
this.name=name;
this.salary=salary;
}
public void printInfo(){//输出员工相关信息
System.out.println("员工姓名:"+name+" "+ "员工工资:" +salary);
}
}
class Manager extends Employee{//经理类(子类)
double salary;//隐藏了父类中的salary中的成员变量
String department;//子类中新的成员变量
public Manager(){//构造无参函数
}
public Manager(String name,double salary,String department){
this.name=name;//从父类继承的name属性
this.salary=salary;//子类自己的成员变量
this.department=department;
}
public void printInfo(){//对父类的printInfo()重写,输出管理者信息
System.out.println("经理姓名:"+name+" "+"经理部门"+" "+department+"经理工资:"+" "+salary);
}
}
public class Demo4_14{
public static void main(String[] args){
Employee em=new Employee("张三",2500);
em.printInfo();
System.out.println("em.salary=" + em.salary);
Manager mg1=new Manager("李四",6568.5,"采购部");
mg1.printInfo();
System.out.println("mg1.salary="+mg1.salary);
Manager mg2=new Manager("王五",7845.2,"市场部");
mg2.printInfo();
System.out.println("mg2.salary="+mg2.salary);
}
}
注意:
构造方法不能继承,不能覆盖
静态的方法不存在覆盖
私有的方法不能覆盖
2.封装
封装:将类的数据进行隐藏起来,封装到一个类中,使用访问修饰符,在主函数中用对象来调用它。 getName setName等方法提供了进行了对成员变量的公共访问接口
class UniversityStudent{
private String name;//其他类无法访问该成员变量
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
注意:
封装保证了对象信息的正确性和完整性
3.继承
继承(extends):子类继承父类的特征和行为,使子类对象有父类的特征,提高了代码的复用性
(继承也得遵守修饰符):子类继承父类的方法,子类还可以创建自己的方法。
子类使用父类的带参数的构造方法super(name);
对父类的private,子类是无法访问的
class Ford extends Car(){}
4.包(package):
包(文件夹):为了区分类名的命名空间,通常把功能相似或相关的类或接口组织放在同一个包中,采用树形目录存储方式。
import java.util.Scanner 导入java核心类库中util包中Scanner类
package aaa,bbb,ccc,ddd;创建多层级的文件夹
package必须放在JAVA源文件的第一行,
import在第二行,
空包:java.lang.*
5.最终类
最终类:final关键词修饰最终类 ,一些类在定义的时候就被设置只能让使用者使用该类里面的功能,不能被继承。例如:String
6.抽象类
抽象类(abstract)(abstract class Animal{})(含有抽象方法的类):是它的所有子类的公共属性的集合,是包含一个或多个抽象方法(public abstract void play();),也可以包含一般方法。必须继承使用,必须有子类,抽象方法只能在抽象类中,对类的进一步抽象,子类必须重写父类的抽象方法。
abstract class Animal{//抽象类
public abstract void play();//抽象方法
}
class Dogs extends Animal{
public void play(){
System.out.println(“小狗会摇尾巴”);
}
}
class Pig extends Animal{
public void play(){
System.out.println(“小猪会哼哼”);
}
}
Animal p1=new Dogs();//采用子类向上转型
p1.play();
Animal p2=new Pig();//对象的向上转型
p2.play();
注意:
抽象类不能实例化,Animal s=new Animal();
抽象方法不能是private
抽象类的特征:1.有构造方法2.有一般方法和抽象方法3.可以有变量4.单继承
抽象类必须有子类,使用extens继承,一个子类只能继承一个抽象类。
子类(如果不是抽象类)必须覆盖抽象类中所有的抽象方法,否则把子类设置成abatract类
8.接口
接口:接口是一系列方法(函数)的声明,是一些方法特征的集合,没有方法的具体实现,
包含抽象方法。
public interface Flying(接口名){
void fly();
}
class 子类名 extends 父类名 implements Flying(接口名){ //重写接口里的方法体;
public void fly(){
System.out.print(“客机在飞行”);
}
}
注意:
接口的功能有:接口可以实现不同类的相同行为,例如:鸟类和飞机都具有飞行功能。
接口不能直接产生对象。Flying f=new Flying();
接口(interface):1,全是抽象方法2.不能创建对象3.只能是常量4.没有构造方法5.多继承
9.注意:
类描述对象的属性和方法。
堆:用于动态分配内存。
栈:用于存储局部变量、函数调用信息、返回地址、函数参数。
静态存储区:静态变量、全局变量,以及常量。分为两个部分,全局静态区和常量静态区。(who why what where when)
(字段)=(成员变量)=(属性)