java学习笔记三

this:理解什么是this代词
类变量/类方法:什么是类变量和类方法
面向对象编程的四大特征:初步理解抽象、封装、继承和多态
this为什么会存在?
   java虚拟机给每个对象分配一个this,代表当前对象
   注意:this不能在类定义的外部使用 只能在类定义的方法中使用
类变量???静态成员变量???
        提出问题:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在又多少小孩在玩,请用面向对象的思想编程
        static int total=0;total是静态成员变量,可以被任何一个对象访问
 类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时取到的都是相同的值,同样任何一个该类的对象去修改它时修改的也是同一个变量
    如何定义类变量:访问修饰符  static 数据类型  变量名;
    如何访问类变量:类名.类变量名 或者 对象名.类变量名  
    实例:
    public class Demo3_2
    {
     static int i=1;
     //静态区域块  只被执行一次
     static 
     {
      i++;
     }
     
     public Demo3_2()
     {
      i++;
     }
     
     public static void main(String []args)
     {
      Demo3_2 test1=new Demo3_2();
      System.out.println(test1.i);
      Demo3_2 test2=new Demo3_2();
      System.out.println(test2.i);
      
     }
    }
    打印结果:3
              4
    
类方法:   类方法是属于所有对象实例的,其形式如下:
       访问修饰符  static 数据返回类型  方法名() {}
   注意:类方法中不能访问非静态变量(类变量)
   使用:类名.方法名 或者 对象名.方法名
java中的规则:类变量原则上用类方法去访问和操作   
   若某方法需要所有对象共享的时候 可使用类方法
抽象:我们在定义一个类的时候,实际上是把一类事物共有的属性和行为提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象
封装:封装就是抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据操作。
  ---访问控制修饰符:public private和protected。
    java提供了四种级别的访问修饰符来控制变量和方法的访问权限
    (1)公开级别的:用public修饰,对外公开
    (2)受保护级别的:用protected修饰,对子类和同一个包中的类公开
    (3)默认级别的:没有修饰符号,向同一个包中的类公开
    (4)私有级别的:用private修饰,只有类本身可以访问,不对外公开
   包的概念:
       包的必要性:
       包的三大作用:1.可以区分相同名字的类
                     2.当类很多时,可以很好的管理类
                     3.控制访问范围
       打包命令:     package com.shunping  一般放在类定义的最前面
       包名一般要小写
       如何引入包?
          import 包;引入一个包的目的主要就是使用这个包下面的类
    继承:为什么要继承?
    解决之道:
     继承可以解决代码复用,让我们的编程更加靠近人类的思维,当多个存在相同的属性和方式,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法
     所有的子类不需要定义这些相同的属性和方法,只需要extends语句来声明继承父类
     class 子类  extends 父类      
 这样子类就会自动拥有父类的属性和方法
    继承:深入讨论
     1、父类的那些属性和方法被子类在继承了?并不是父类的所有属性和方法都可以被继承
     结论:父类的public属性和方法,protected属性和方法,默认修饰符的属性和方法都可以被子类继承,
     而只有private属性修饰的属性和方法不能被子类继承
     编程中如果希望子类不继承某个属性或方法就将其声明为private
    注意事项:
    1、子类最多只能继承一个父类
    2、java所有的类都是Object类的子类
    3、JDK6中有202个包,3777个类、接口、异常、枚举、注释和错误。
    4、在做开发的时候强烈建议大家多查JDK的帮助文档
    5、在使用类的时候,是在不知道怎么用就goole
方法重载:
 简单的说方法重载就是类的同一种功能的多种实现方式,到底采用哪种实现方式取决于调用者给出的具体参数
   注意事项:
    1、方法名称相同
    2、方法的参数类型、个数、顺序至少有一个不同
    3、方法的返回类型也可以不同
    4、方法的访问修饰符可以不同
    思考:如果只是方法的返回类型不一样能否构成方法重载?  答案:不可以  
    同理如果只是访问修饰符不同也不可以构成方法重载。
方法覆盖:如何解决子类和父类的方法的异同的问题?
 子类的方法重定义覆盖父类中的方法。
 概念:方法覆盖就是子类有一个方法和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法
 覆盖了父类中的那个方法
    注意事项:
     1、子类的方法的返回类型、参数和方法名称要和父类的方法的返回类型、参数和方法名称必须相同,否则就不是方法覆盖
     2、子类的方法不能缩小父类的方法的访问权限
多态:就是指一个引用在不同情况下的多种状态。也可以这样理解:多态是通过指向父类的指针,来调用在不同的子类中所实现的方法
  注意事项:
      1、java中允许父类引用变量引用它的子类的实例
      2、类型转换还有一些具体的细节,稍后介绍
      
抽象类:用abstract关键字修饰的类就是抽象类
     为什么需要抽象类?
         父类方法的不确定性
      当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法【抽象方法】,用abstract来修饰该类【抽象类】.
      abstract class Animal
      {
       int age;
       String name;
  abstract public void cry();
      } 
     
抽象类依然可以被继承,当一个类继承的类是抽象类时,需要程序员将抽象类中的所有抽象方法实现出来。
      class Cat extends Animal
      {
           int age;
           String name;
           //实现父类的cry方法
           public void cry()
           {
            System.out.println("旺旺叫!");
           }
      }
      
      
      抽象方法在实际编程中用的不是很多,但是面试时问的会比较多
 注意事项:
  1、抽象类不能被实例化
  2、抽象类不一定要包含抽象方法,也就是说抽象类可以没有抽象方法。
  3、一旦一个类包含了抽象方法,那么这个类就必须声明为抽象类。
  4、抽象方法不能有主体。
  5、抽象类中可以存在已经实现的方法。
  
  
接口:为什么会有接口?
     接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候再根据具体的情况把这些方法再写出来。
 class 类名 implements 接口
 {
  变量;
  方法;
 }
思考:举例说明接口如何实现了多态?
interface Usb
{
 int a=1;
 
 //声明了两个方法
 public void start();
 public void stop();
}
//编写了一个照相机类 实现usb接口
//一个重要的原则:当一个类实现了一个接口,该类需要显示那个接口的所有方法,不能只实现其中的一部分方法
class Camera implements Usb
{
 public void start()
 {
  System.out.println("我是相机,我开始工作了!")
 }
 public void stop()
 {
  System.out.println("我是相机,我停止工作了!")
 }
}
//编写了一个电话类,也实现了Usb接口
class Phone implements Usb
{
 public void start()
 {
  System.out.println("我是电话,我开始工作了!")
 }
 public void stop()
 {
  System.out.println("我是电话,我停止工作了!")
 }
}
class Computer
{
  //开始使用Usb接口
 public void useUsb(Usb usb)
 {
  usb.start();
  usb.stop();
 }
}
public class Demo4_2
{
 public static void main(String[] args)
 {
  Computer computer1 =new Computer();
  Camera camera1 =new Camera();
  Phone phone1 =new Phone();
  computer.useUsb(Camera1);
  computer.useUsb(phone1);
 }
}
 
接口注意事项:
1、接口不能被实例化
2、接口中所有的方法都不能有主体,接口中不能存在已经实现的方法。
3、一个类可以实现多个接口
4、接口中可以有变量,但是变量不能用private或者protected修饰
   ---接口中的变量本质上都是static的,而且是final的,不管你加不加static修饰
   ---在java开发中,我们经常把经常使用的定义在接口中,作为全局变量使用。访问方法:接口名.变量名
5、一个接口并不能继承其他的类,但是可以继承其他的接口
小结:接口是更加抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体。
接口体现了程序设计的多态和高内聚低耦合的设计思想。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值