面向对象编程(OOP)
面向对象编程的本质:以类的方式组织代码,以对象的形式组织(封装)数据
抽象
三大特性
非静态方法之间可以互相调用不用new对象,但是在静态方法里面无法直接调用非静态方法,原因是静态方法是和类一起加载的,非静态方法是在类实例化之后才存在的,相当于一个已经存在的方法调还没存在的方法
构造器
-
没有返回值,必须和类名相同
-
使用new关键字,本质是在调用构造器
-
用来初始化值
-
一旦定义了有参构造,想使用无参构造,就必须显示定义一个无参构造
-
this. 代表当前类的....
类与对象
-
类与对象:
-
方法
-
对应的引用
-
引用类型 : 基本类型(8)
-
对象是通过引用来操作的,栈-->堆
-
属性:字段field 成员变量
默认初始化
-
数字:0,0.0
-
char:u0000
-
boolean:false
-
引用:null
修饰符 属性类型 属性名=属性值!
-
对象的创建和使用
-
类
封装
高内聚、低耦合
属性私有:get/set
继承
-
子类继承父类,就会拥有父类的全部方法
-
变量的修饰符:public、protect、default、private
-
在java中所有的类都直接或间接继承object
-
java中只有单继承,没有多继承
-
私有的东西无法被继承
-
调用父类的构造器,必须要在子类构造器的第一行
super
this和super的区别
代表的事物不同
-
this:本身调用者这个对象
-
super:代表父类对象的应用
前提
-
this在没有继承也可以使用
-
super只能在继承条件下才可以使用
构造方法
-
this():本类的构造
-
super():父类的构造
方法重写
重写都是方法的重写,和属性无关
重写,子类的方法必须和父类一致,方法体不同
//静态方法
public class A extend B
@Override
public static void test()
System.out.println("A->test");
public class B
public static void test()
System.out.println("B->test");
public class C
public static void main(String[] args)
A a=new A();
a.test();
B b=new A();
//非静态方法
public class A extend B
@Override
public void test()
System.out.println("A->test");
public class B
public void test()
System.out.println("B->test");
public class C
public static void main(String[] args)
A a=new A();
a.test();
B b=new A();
静态方法和非静态方法调用区别很大
静态方法只能被继承不能被重写
多态
Student s1=new Student();
Person s2=new Student();
Object s3=new Student();
注意事项
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系,类型转换异常!ClassCastException
-
存在条件:继承关系方法, 需要重写,父类引用指向子类对象
-
static 方法,属于类,它不属于实例
-
final 常量
-
private 方法
-
把父类转换为子类,向下转型,强制转换
-
方便方法的调用,减少重复的代码,简洁
python面向对象编程
类
面向对象的开发语言
一切皆对象
面向过程
面向对象
面向对象它是包含面向过程的
类是一类东西,一个模型
实例是通过这个模型造出来的东西
对象即实例
实例化就是造实例的过程
面向的对象的特性
封装
就是把零散代码封装成一个函数,或者封装成一个类
继承
就是父类有的东西,你也有
多态
一种方法多种实现
命名规范
StrToDict,如果有多个单词的话,每个单词首字母都大写,如果是类名的话,首字母要大写,str_to_dict多个单词用下划线连起来也行
class Student: # 经典类
pass
class Student2(): # 新式类,都用这种形式
pass
class BuyCar(object): # 新式类
def fourS(self):
print(‘这里是4S店,要买车‘)
def dsj(self):
print(‘这里来交购置税‘)
def sgj(self):
print(‘车管所‘)
def jgj(self):
print(‘交管局‘)
# jxmc = BuyCar()# 实例化,类名加括号就是对这个类进行实例化,jxmc就是一个实例、对象
# jxmc.fourS()# 通过对象来调用
# jxmc.dsj()
# jxmc.sgj()
# jxmc.jgj()
属性就是类里面的变量
方法就是类里面的函数