面向对象是相对面向过程而言;
面向对象和面向过程都是一种思想;
面向过程:强调的是功能行为,算法第一,数据结构第二,程序=算法+说数据结构;
面向对象:程序=对象+对象+......;数据结构第一,算法第二;
对象的概念:对象时现实存在的具体事物;可以是有形的,如某个人,某种事物,也可以是无形的,
如某项计划,某次商业交易;
属性也叫做全局变量;也叫实例变量;对象也叫实例;
成员变量:在方法外定义的变量就叫做全局变量;
全局变量的特点:在类中的任何方法中直接访问;
全局变量可以不初始化,可以直接使用;
因为JVM为所有的全局变量赋予一个默认值;
局部变量:1、局部变量只定义在局部范围,如:方法体,代码块;方法参数也是局部变量
局部变量存在于栈内存中;
局部变量的特点:JVM不会为局部变量赋予一个默认值;
全局变量和局部变量的区别:
1、全局变量直接定义在类中;
局部变量定义在方法中,方法参数,语句中;
2、全局变量在这个类中有效;
局部变量只在自己的所属的大括号内有效,大括号结束,局部变量失去作用域;
3、全局变量存在于堆内存中,随着对象的产生而存在;消失而消失;
局部变量存在于栈内存中,随着所属方法的运行而存在,随着所属方法的结束而是释放;
创建对象:每创建一个对象,都会在堆内存中每个对象的属性分配独立的内存空间,但是不会每次都为方法分配独立的内存空间;
一个类中的所有的方法,在内存中都各自只占用一份内存空间,为该类所有的对象共享;
这是因为,方法一般都是用来操作数据的,对于不用对象来说只是操作数据不同,而操作数据方式是相同的,所以没有必要为每个对象的方法都分配一份独立的内存空间;
面向对象:
封装:指隐藏对象的属性和实现细节,不让外部直接访问,仅对外提供访问方式
private私有的;
是一个权限修饰符;
用于修饰成员(成员变量和成员方法)
被私有化的成员在本类中有效;
构造方法:函数名和类名相同;不用定义返回值类型;没有具体的返回值;
用作:给对象初始化; 调用:new操作符;
每创建一个对象都得调用构造函数一次;
如果类中没有显示声明构造方法
JVM会提供一个无参的构造方法;
如果类中有显示声明的构造方法时;
JVM不会提供一个无参的构造方法;
显示声明构造方法:Person(String name,int age){this.name=name;
this.age=age;}
继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
多个类可以称为子类,单独这个类称为父类或者超类。
子类可以直接访问父类中的非私有的属性和行为。
通过extends关键字让类与类之间产生继承关系。
意义:继承的出现提高了代码的重用性;继承的出现让类与类之间产生了关系,提供了多态的前提。
java 只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
java 支持多层继承(继承体系)
class A{}
class B extends A{}
class C extends B{}
定义继承需要注意
不要仅为了获取其他类中某个功能而去继承
类与类之间要有所属(‘is a’)关系,如:狗是动物的一种。
super关键字:
使用spuer关键字,super代表父类对象;
访问父类构造方法:
super();
super(name);在子类构造方法中调用且必须是第一句;
访问父类属性:
super.name;
访问父类方法:
super.print();
super和this的用法相像;
this代表本类对象的引用;
super代表父类的内存空间的标识;
当子父类出现同名时,可以用super进行区分;
子类要调用父类构造函数,可以使用super语句;
super调用构造方法,只能是第一句;
方法重载:首先看方法名,然后看参数列表;
如果方法名相同,看参数列表,参数类型相同时,看个数是否相同,如果个数不相同时,就不是方法重载;
同一类中,同名不同参数的方法的重载方法;仅有返回类型不同方法不能重载,即方法重载必须方法签名不同;
方法签名是方法名+参数列表;
/*方法重写(方法覆盖):子类重写父类的方法;同样的方法名;在子类中写super.方法名();
在子类中扩展一些功能;子类从写的时候不能比父类的范围小*/
方法重写:
子类出现与父类一模一样的方法时,会出现重写操作,也称为覆盖或者复写
在子类重写方法中,继续使用父类被重写的方法,可以通过super.函数名获取;
方法重写的注意事项:
重写方法时方法签名和返回值类型必须一样;
重写时,子类方法权限一定大于等于父类访问权限;
父类中的私有方法不可以被重写;
静态只能重写静态
构造方法:可以创建一个对象;方法:实现一种功能;
方法重载和方法重写
位置 方法名 参数表 返回值 访问修饰符
方法重写 子类 相同 相同 相同或 不能比父类更严格
是其子类
方法重载 同类 相同 不相同 无关 无关
final关键字:
final可以修饰类,方法,变量;
final修饰的类不可以继承;
final修饰的方法不可以被重写;
final修饰的变量是一个常量,只能被赋值一次;
内部类只能访问被final修饰的局部变量;(jdk小于1.8以下没有这个特性)
首先想类、属性、对象,然后写出方法,最后考虑对象
多态:程序中的多态:同一个引用类型
使用多态实现的思路:子类是父类的多态
编写父类;编写子类,子类重写方法;运行时,使用父类的类型,子类的对象;
liskov替换:
凡是父类对象出现的地方都可以用子类对象来替换
构造方法:没有返回值类型,有返回值;
Static关键字:
用于修饰成员(成员变量和成员函数)例:static String name;
被修饰后的成员具备以下特点:
随着类加载而加载,随着类的消失而消失;
优先于对象存在;
被所有对象所共享 ;
可以直接被类名调用;
静态方法只能访问静态成员;
静态方法不能出现this、super关键字;因为对象还没有产生;
静态成员在创建对象之前产生的,其他的成员在创建对象之后产生的;
什么叫类变量(静态变量)?
答:修饰成员变量的称之为类变量;修饰成员方法的称之为静态方法;
抽象类和接口:
抽象的定义:抽象是把多个事物共性抽取出来,本质就是把我们关注的内容抽取出来。
什么是抽象类?
Java中可以定义没有方法体的方法,该方法由其子类来具体实现。该没有方法体的方法我们称之为抽象类。
格式:访问修饰符 abstract返回类型 函数列表();
抽象类不可以实例化,也就是不可以用new创建对象;
抽象类通过其子类实例化,而子类需要覆盖掉抽象类所有的抽象方法后才可以可以创建对象,否则子类也是抽象类;
不同点:
1、一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足;
2、一般类中不能定义抽象方法,只能定非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。
3、一般类可以被实例化;抽象类不可以被实例化。
开放封闭原则:
对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭:
意味着类一旦设计完胜就不该改变;
接口成员特点:
成员变量:只能是静态成员和抽象方法;
java接口是对功能的扩展;
通过实现接口,Java类可以实现多实现;
一个类可以同时继承一个父类并且实现多个接口;
接口和接口之间可以通过使用extends来产生继承关系;
成员变量:只能是静态变量;
修饰符public static final;
没有构造方法;
类与类:继承关系,只能继承,可以多层继承,不可以多继承;
类与接口:
实现关系,可以单实现,也可以多实现;
可以在继承一个类