多态,封装,继承,抽象类,接口

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)

(字段)=(成员变量)=(属性)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值