zoukankan      html  css  js  c++  java
  • 1.继承(extends)、超类(superClass)、子类(subClass)

    注意:继承主要使用的is-a关系

    在子类中用一个新的方法来覆盖超类中的方法(override),需要注意的是如果子类之中的方法或者域  被覆盖时,仍然想访问superClass中的方法和域,此时必须使用super的关键字。

    比如:


     class Manager extends Employee {
    	 private double bonus;
    	 public Manager(String n,double s,int y,int m,int d)
    	 {
    		 super(n,s,y,m,d);
    		 bonus=0;
    	 }
    	public double getSalary()
    	{
    		double baseSalary=super.getSalary();
    		return baseSalary+bonus;
    	}
    	public void setBonus(double b)
    	{
    		bonus=b;
    	}
    }
      class Employee {
    	 private String name;
    	 private double salary;
    	 private Date hireDay;
    	 public Employee(String n,double s,int year,int month,int day)
    	 {
    		 name=n;
    		 salary=s;
    		 GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
    		 hireDay=calendar.getTime();
    	 }
    	 public String getName()
    	 {
    		 return name;
    	 }
    	 public double getSalary()
    	 {
    		 return salary;
    	 }
    	 public Date getHireDay()
    	 {
    		 return hireDay;
    	 }
    	 public void raiseSalary(double byPercent)
    	 {
    		 double raise=salary*byPercent/100;
    		 salary+=raise;
    	 }
    }

    其中Manager中继承了Employee,重载了其getSalary的方法,其中必须使用super.salary来访问超类中的salary域。

    小结:

    1.super的两种用法:一、调用超类中的构造器。二、调用访问被重载了的域或者方法。可以类比与this的用法。

    2.多态(polymorphism):一个对象变量可以指示多种实际类型的现象。比如说其中的e

    Manager boss=new  Manager("vaful wu",8000,1994,1,8);
    		boss.setBonus(5000);
    	
    	Employee[] staff=new Employee[3];
    	staff[0]=boss;
    	staff[1]=new Employee("aa",5000,1989,10,1);
    	staff[2]=new Employee("bb",4000,1990,12,3);
    for(Employee e: staff)
    		System.out.println("name:"+e.getName()+"    salary:"+e.getSalary());

    e对应的是Employee和重载的Manager对象。

    因此,可以将子类的引用赋值给超类,但反之不行。因为is-a的关系,比如说manger一定是一个employee(原则是:特殊到一般,复杂到简单)

    2.多态和动态绑定、抽象abstract

    多态指的就是一个对象变量可以指示多个实际类型,并在编译器的运行过程中,一般选择动态绑定。

    编译器的一般执行过程:一、查看对象的声明类型和方法名。二、查看方法的类型的参数名和个数,三、如果不是private、static和final方法,则实现动态绑定在method table中选择最接近的方法。



    使用关键字abstract可以使得抽象类中没有必要的方法或者形式上的方法:

    类比于C++中的纯虚函数

    public:vitrual string getDescription()=0;//c++中的类似用法

    比如Person类中:

    public abstract String getDescription();

    但是需要注意的是abstract类不能被实例化。


    3.Java中常见的4中修饰符

    private:仅仅是本类可用

    public:对所有类可用

    protected:对本包及所有子类可用

    默认(default)不要修饰符:对本包可见


    4.object类

    可以通过file:///D:/Java/docs/api/index.html查看文档。

    5.可变参数方法(类比C语言中的可变参数函数)

    /***********************Java*******/

    public class PrintStream{

            public PrintStream printf(String fmt. Object ... args){return format(fmt,args);}

    }省略号是Java的一部分,表明这个方法可以接受任意数量的对象。实际上后者表示的是Object 数组,即Object[];

    /********C语言*****************/

    使用头文件stdarg.h,函数声明形式类似于type fun(int n_values,...)

    例如:

    </pre><pre name="code" class="cpp">float average(int n_values,...)
    {
         va_list var_arg;
         int count;
         float sum=0;
         va_start(var_arg,n_values);
         for(count=0;cpunt<n_values;count+=1){
          sum+=va_arg(val_arg,int);
    }
         va_end(var_arg);
         return sum/n_values;
    }
  • 相关阅读:
    前端知识 | 一个简单的登录页面包含多少前端基础知识?
    SQLserver查询作业、视图、函数、存储过程中的关键字
    SQL server 数据库备份至服务器本地磁盘和其他服务器磁盘
    Linux(centos)安装vim
    CentOS6 7 8更换阿里yum源
    centos8 最小化安装 无 ifconfig,netstat 的安装
    修改MySQL用户的host属性
    阿里云NTP服务器(国内可用的NTP服务器)
    vCenter Server Appliance(VCSA )7.0 部署指南
    Chrome离线安装包最新版
  • 原文地址:https://www.cnblogs.com/zgj544/p/7588835.html
Copyright © 2011-2022 走看看