基本概念
类,对象,类的定义和对象的使用
局部变量&成员变量

成员变量和局部变量的区别
成员变量:
①成员变量定义在类中,在整个类中都可以被访问。②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。③成员变量有默认初始化值。局部变量:①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。③局部变量没有默认初始化值
在使用变量时需要遵循的原则为:就近原则
首先在局部范围找,有就使用;接着在成员位置找(本类—-》父类)。
封装
private
this
继承
super
⚠️:子类一般有两个构造,一个是空参构造,一个是全参构造
访问修饰符
- private:强调给自己(本类)使用
- default:强调给同包下的类使用
- protected:强调给子类使用
- public:强调给大家使用
重写和重载
- 重写从父类继承下来的方法
- 重写的权限不能小于父类的方法
多态
同一事物在不同条件下的多种形态,如水在常温下是液体,高温下是气体,低温下是固体
父类指向不同子类对象后,父类调用方法时的多种形态(父类指向不同子类对象后,调用的就不是自己的方法类,而是子类的各种方法了)
实现多态的步骤
- 要有继承关系
- 要有方法重写
- 父类引用指向子类对象,父类接口指向子类对象
多态的实例
多态中的成员方法:编译看左,运行看右
// 父类引用指向子类对象Animal animal = new Dog();// 编译看左(编译通不通过看的是 animal对应的类里有没有setName这个成员)animal.setName("哈士奇");// 运行看右(运行时使用的方法是 Dog类中的eat方法)animal.eat();
多态中的成员变量:编译看左,运行也看左
父类作为形参实现多态
// 多态做法Dog dog = new Dog();dog.setName("哈士奇");showAnimal(dog);Mouse mouse = new Mouse();mouse.setName("Jerry");showAnimal(mouse);}// 父类作为形参 来接受任意的子类对象public static void showAnimal(Animal animal){animal.eat();}
upcasting downcasting
- instance of
抽象类&子类
- 成员特点
- 类型转换
- 引用传递
抽象类比普通类多一种抽象方法,其他和普通类一样
不能被实例化
抽象类的子类:子类是普通类,需要实现(重写)父类的所有抽象方法。子类是抽象类,则不同实现父类的抽象方法
接口&实现类(子类)
比抽象类更抽象
你写接口你写实现,就不用写接口了。我写接口你实现,接口就用上了。我不给你规定好了,你怎么知道该实现哪些内容呢。更进一步,我写接口你实现,你今天不在,我明天出差,程序后天交工,那我今天必须把调用这个接口的代码写好。所以就需要接口中有函数,有明确的函数签名。我写个接口,再把调用函数写好,明天你把接口实现了,传个实例进来,交工。
接口是对动作的抽象,而抽象类是对根源的抽象。对于抽象类,比如男人,女人这两个类,那我们可以为这两个类设计一个更高级别的抽象类—人。对于接口,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,甚至可以学三哥一样用手抓着吃饭,那么可以把这些吃饭的动作抽象成一个接口—吃饭。所以在高级语言中(如Java,C#),一个类只能继承一个抽象类(因为你不可能同时是生物又是非生物)。但是一个类可以同时实现多个接口,比如开车接口,滑冰接口,啪啪啪接口,踢足球接口,游泳接口。
eg:猫狗—-》动物类(年龄,吃) is a
猫人—-》接口(吃) like a
成员特点
- 成员变量:public static final(一般情况下不在接口中定义变量)
- 成员方法:public abstract
- 构造函数:接口没有构造函数
final
- 修饰类:不能被继承—-》与abstract冲突
- 修饰方法:不能被重写—-》与abstract冲突
- 修饰成员变量,局部变量:常量
- 不建议修饰引用类型 final Person p = new Person(); //not reconmended
static
- 修饰类:类变量
- 修饰方法:类方法
- 类.类变量 or 类.类方法
- static内部???
