java学习笔记之面向对象

  1. 在一个文件中只能有一个public的类
  2. 定义于方法中的变量叫局部变量。局部变量在栈内存,必须初始化之后才能使用;成员变量在堆内存,具有默认初始值。
  3. set()方法:用于成员赋值,要自己写,如setName,get()方法用于获取成员变量。
  4. this.name获取成员变量,this不能使用在static修饰的方法中,this()表示this的对象使用了无参构造方法。
  5. static:(1)类名.(使用static修饰的成员变量或方法)(2)静态方法中不能使用非静态的成员。静态成员先于成员产生,这个类的所有对象共享。
  6. 代码块:(1)局部代码块:生命周期仅在自己的代码块中;(2)构造代码块:在成员变量初始化之后执行,在构造方法之前执行;(3)静态代码块:static{ } 只在类加载的时候执行一次。执行顺序:静态成员--->静态代码块--->非静态成员--->构造代码块--->构造方法。
  7. extends:从一个父类中获取非私有的成员变量,叫继承。class 子类 extends 父类
  8. 当子类创建对象的时候,父类的无参构造方法首先被调用,不论子类使用有参构造还是无参构造,父类都调用无参构造。
  9. 注意:如果写了有参构造方法,那么要记得加上无参构造方法。
  10. super(参数列表):声明去创建父类对象,如果没有参数,会调用父类的无参构造方法;有参数就调用父类的有参构造方法。super.成员变量/成员方法---调用父类的成员变量/成员方法,如果要调用父类的私有成员,那么要用super.get…(公有方法)。
  11. 在所有类的构造方法中,包括有参构造和无参构造,系统都会在构造方法的第一行添加super();即使没有看到,也有默认添加。super()的位置是第一行,当子类对象di调用一个变量的时候,顺序是(1)先检查局部变量有没有(2)再检查子类中有没有(3)再检查父类中有没有 (就近原则)
  12. 方法的重写:子类的方法必须与父类完全一致。子类方法的修饰符不能低于父类方法的重写,如父类为pulic,那么子类必须是public及以上。
  13. 修饰符 同一个类中 同一个包中 不同包子类中 不同包其他类
    public
    protected ×
    默认 × ×
    private × × ×
  14. final修饰的方法在子类中不能被重写,final关键字修饰的类不能被继承。
  15. object类:是有所类的超类;hashCode()方法返回该对象的哈希值,同一个对象的hashCode相同,不同对象的不同;getClass().getName():返回Class类型的对象;toString():getClass().getName()+"@"+Integer.toHexString(hashCode());System.out.println()方法自动调用对象的toString()方法;equals():判断地址是否相等。重写equals方法,可以通过右键source---generate equals ans hashCode(),来自动生成。因为规范要求相同的对象需要拥有相同hashCode。
  16. obj instanceof Student 判断sh是否为Student类
  17. java中没有多继承,但是有多重继承。
  18. 多态:(1)有继承;(2)有方法的重写;(3)父类引用指向子类对象。满足三点才是多态。Father f=new Son(),(1)调用重写的方法实际就是调用子类的方法(2)可以调用父类的方法(3)不能调用子类特有的方法,可以强制转换成Son类型再调用,但不能转换成别的类型,因为实际上是Son类型。
  19. 抽象类:public abstract class PersonV{ }; 抽象类不能被实例化,非私有成员可以被访问。
  20. 抽象方法:public abstract void eat();子类要实现从父类继承过来的方法,除非这个方法在子类中也是抽象的。凡是含有抽象方法的类必定是抽象类。
  21. abstract不能修饰成员变量,static和abstract不能共存。
  22. 抽象类引用作为参数,实际上传来的是这个抽象类的子类对象。
  23. 接口(interface) interface 接口名{ }:(1)接口中的方法都是抽象方法,而且都是public修饰的;(2)用法:class 类名 implements 接口名1,接口名2……{};(3)接口的实现类,必须实现接口中的所有抽象方法,或者自己作为抽象类。(4)一个类可以在继承父类的同时实现接口(先extends再implements)(5)接口中的变量默认都是常量、static。
  24. 对象 instanceof 类/抽象类/接口
  25. 成员内部类:(1)作为成员变量使用class Outer{ Inner inner = new Inner(); class Inner{ }  };(2)在类的方法中创建内部类对象使用。(3)Outer.Inner oi=new Outer().new Inner();
  26. 静态内部类:(1)作为成员变量使用class Outer{ Inner inner = new Inner(); class Inner{ }  };(2)在类的方法中创建内部类对象使用。(3)Outer.Inner oi=new Outer.new Inner();
  27. 局部内部类:在方法中定义类
  28. 匿名内部类:当对象只用一次时使用,匿名内部类不是类,是对象。语法:new 接口(){ }; (1)匿名对象使用:new Flyer(){
                public void fly()
                {
                    System.out.println("飞呀飞");
                }
            }.fly();(2)test (new 接口(){ })。实例:先写一个接口Flyer和它的抽象方法fly()。
    package com.mcq;
    
    public class FlyerDemo {
    	public static void main(String[] args) {
    		Flyer flyer = new Flyer(){//接口类型指向一个匿名内部类
    			public void fly()
    			{
    				System.out.println("飞的更高");
    			}
    		};
    		flyer.fly();
    		new Flyer(){
    			public void fly()
    			{
    				System.out.println("飞呀飞");
    			}
    		}.fly();
    		FlyerDemo flyerdemo=new FlyerDemo();
    		flyerdemo.test(new Flyer(){
    			public void fly(){
    				System.out.println("飞吧飞吧");
    			}
    		});
    	}
    	public void test(Flyer flyer){
    		flyer.fly();
    	}
    }
    

     

你可能感兴趣的:(java)