方法的重载与重写的关系(区别);static关键字;单例设计模式;继承;

来源:互联网 发布:xbox360手柄驱动mac版 编辑:程序博客网 时间:2024/05/16 07:13
方法的参数传递(值传递   引用传递)
        基本数据类型:值传递:当参数类型为基本数据类型的时候  传递的是值 出了方法  原有值不改变
引用数据类型:引用传递:当参数类型为引用数据类型的时候  传的是堆内存中的地址  可以改变  堆内存中地址对应的数据
static关键字
    static静态
    优点,
    1.节省资源,可以把共性的东西抽取出来设置为静态  共有
    2.静态修饰的成员 优先于对象加载入内存  随着类的加载而加载
    3.当成员被静态修饰后,多了一种调用方式  类名。静态成员
    总结:与类相关的  与对象无关


修饰成员变量:
  所属:    static修饰静态成员变量属于类 叫类变量
            static修饰非静态成员变量属于对象,实例变量
  内存:   静态  存储于方法区的静态区
          非静态: 堆内存
          出现时间不同,调用不同
修饰成员方法
语法:
访问权限修饰符 static 返回值类型 方法名(形参){
//方法体
}
  注意:
  1.静态方法 只能访问静态成员
  非静态既可以访问静态  也可以访问非静态
  静态方法中 不可以定义 this / super关键字
  因为静态优先于对象存在 所以静态方法中不可以  出现非静态的this/super的成员 静态只能访问静态
总结:利: 将对象共享的数据进行单独存储 节省空间 可以直接用类名调用
      弊: 生命周期过长 访问出现局限性 静态虽好 只能访问静态


public static void main(String[] args) {


}
1.public 访问权限修饰符 (访问权限最大控制符)
2.static 静态的 随着类的加载 进入内存
3.void 不确定的范围值 当前jvm 不需要这个方法带回返回值
4.main 不是个关键字 jvm识别这个方法名 程序的入口
5.String[]:存放String类型数据的数组 可以接收键盘录入
6.args 数组名 不是关键字 arguments参数的意思


二、工具类
      什么叫工具类?
         将某些共性的功能抽取出来  单独封装Java类   这样提高了复用性
类ArrayTool
             练习:
                1.获取最大值
2.数组的遍历


工具类:私有化构造函数 因为不需要在其他类中创        建对象
        将所有方法用static修饰 可以类名.调用


静态代码块
     static{
     
        }
随着类的加载而执行  只执行一次
并有优先于主函数  没名字比有名字的快
                用于给类初始化的
           ****一般用于加载驱动


     构造代码块{
     
     }


单例设计模式
      模式:解决一件事最快的方法,最有效的方法
      Java中有23种设计模式
      设计模式   是纯理论  纯思想   
  3步:
     1.将构造函数私有化
     2.在本类中创建一个本类对象
     3.提供一个方法可以获取该类对象


饿汉式 : 先初始化对象
private Single(){}
private static Single s = new Single();
public static Single getSingle(){
return s;
}
懒汉式 : 对象是方法被调用时 才初始化 也叫作延时加载
private Single(){}
private static Single s = null;
public static Single getSingle(){
if(s == null){
s = new Single();
}
return s;
}

继承:
 父类(超类):super
优点:1.提高代码的复用性  少写代码
      2.让类与类之间产生关系  有了这个关系 才        有了多态  是多态的前提
类与类之间 有共性的关系 抽取出来的是父类
子类继承父类 必须有关系 
        class A{
void demo1(){}
void demo2(){}
}
class B extends A{
void demo1(){}
void demo3(){}
}

 缺点:
      1.类的耦合性增强了
        开发原则:高内聚,低耦合
        只能单继承,不支持多继承
但是支持多层继承
想要调用父类的成员变量用super.name(this.name)

1.想要使用体系,先查阅父类的描述 因为父类中定义的是该体系中共性的功能通过了解共性功能 你就能知道该体系的基本功能 那么这个体系基本已经可用了 


this:代表本类对象的引用
super:代表父类对象的引用


继承中成员方法的关系
同名:
就近原则
不同名:
直接调用

方法的重写:
子父类出现了一模一样的方法

  重写有什么用?
提高了代码的扩展性当子类需要父类的功能,而功能主体 子类特有的内容时,可以重写父类中的功能这样 即沿袭了父类的功能 又定义了子类的特有内容
注意事项:
1.父类私有方法 子类不能被重写
2.子类重写父类方法时 访问权限不能更低(大于等于) 否则编译失败//private < 默认 < public 权限越来越小 那么继承体系 就崩溃了 
重写:一模一样
继承中构造方法的关系
    class Anomal{
        String color;
int leg;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
       }
      class cat extends Anomal
        {
       }
          class Dog   extends Anomal
        {
          }

问题: 重写与重载的区别:
         重载:在同一个类中,方法名相同,参数列表不 同,与返回值无关。
        优点:重载方法可以使得程序更加清楚,以及更加具有可读性
        缺点:会产生歧义,导致编译错误:例:
public static double max(int num1,double num2){
     if(num1>num2){
     return  num1;
}else{
     return num2;
  }
public static double max(double num1,int num2){
   if(num1>num2){
   return num1;
   }else{
    return num2;
   }
  }
}
     重写:子父类出现了一模一样的方法
      作用:子类修改父类中定义的方法的实现
  注意:1.当实例是可以访问时,他才能被覆盖。因为私有方法在他类本身以外是不能被访问的,所以不能被覆盖,如果子类中定义的方法在父类中是私有的,那么这两个方法没有关系。
2.与实例方法一样,静态方法也能被继承,但是,静态方法不能被覆盖。如果父类中定义的静态方法在子类中被重新定义,那么在父类中定义的静态方法将被隐藏,可以使用语法:父类名。静态方法名(SuperClassName.staticMethodName)调用隐藏的静态方法。
小结:重载意味着使用同样的名字但是不同的签名来定义多个方法。重写意味着在子类中提供一个对方法的新的实现。
阅读全文
0 0
原创粉丝点击