Java作为一种面向对象语言。支持以下基本概念:
本节我们重点研究对象和类的概念。
面向对象:
类
对象
封装
继承
????????子类可以继承父类所有的方法和属性(构造方法除外)
????????子类除了有从父类中继承的还可以有自己独有的方法和属性
????????1、只支持单继承,不支持多继承
????????2、支持多重继承
????????3、子类与父类必须具备所属关系
? ? ? ? 4、父类中的private方法也可以被继承
? ? ? ? 5、子类不能直接使用父类中修饰符为private的属性,只能通过get和set进行获取和使用
构造方法
????????与类名相同的方法名称 不带返回值
????????构造方法可以重载
class Animal{
//构造方法不能被重写但是可以被重载
public Animal(){
}
public Animal(String name){
System.out.println("I am "+name);
}
public Animal(String name,int age){
System.out.println("I am "+name+" and I am "+age+" years old");
}
}
this
? ? ? ? 当前类
? ? ? ? this.属性
? ? ? ? this.方法
super
? ? ? ? super.属性? ? ? ?
????????super.方法
????????当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
public class SuperTest{
}
class People{
public void say(String name){
System.out.println("I am "+name);
}
}
class China extends People{
public void say(String name){
System.out.println("hello everyone");
super.say();
}
}
当子类继承父类后 子类的无参构造器会隐式的调用super() 父类的无参构造器
如果父类中没有无参构造器 则子类会报错
? ? ? ? 解决方法一:在父类中定义一个无参构造器
? ? ? ? 解决方法二:在子类中调用父类的有参构造器
重写、重载
? ? ? ? 重写:重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!(方法名相同,形参相同,返回值类型可以不同但是必须为父类被重写方法返回值类型的子类)
? ? ? ? 重载:重载(overload) 是在一个类里面,方法名字相同,而参数不同, 返回类型可以相同也可以不同。
访问控制修饰符
? ? ? ? private? 本类
? ? ? ? default? ?本类中和本包中
? ? ? ? protected? 本类 本包 子类
? ? ? ? public? 所有类
多态
? ? ? ? 父类的引用指向子类的对象
? ? ? ? ?例如:? List arraylist = new ArrayList();
? ? ? ? 多态性:(根据取出来的对象不同调用不同的方法 叫做 虚拟方法调用 或 动态绑定)
? ? ? ? ? ? ? ? 编译时:看的是左边的父类的引用
? ? ? ? ? ? ? ? 运行时:看的是右边的子类的对象
public class PolymorphismTest{
public static void main(String [] args){
Person p1 = new Man(); //对象的多态性:父类的引用指向子类的对象
p1.eat();
p1.somke(); //报错
}
}
class Person{
public void eat(){
}
public void walk(){
}
}
class Man extends Person{
public void eat(){
System.out.println("男人吃饭狼吞虎咽");
}
public void walk(){
System.out.println("男人走路快");
}
public void somke(){
System.out.println("男人喜欢抽烟");
}
}
class Woman extends Person{
public void eat(){
System.out.println("女人吃饭细嚼慢咽");
}
public void walk(){
System.out.println("女人走路慢");
}
public void huazhuang(){
System.out.println("女人喜欢化妆");
}
}
对象引用数据类型转换(Casting)?
????????向上转型:
? ? ? ? ? ? ? ? 多态的使用
????????向下转型:
? ? ? ? ????????Person p = new Man();
? ? ? ????????? Man man = (Man)p;? ?
?多态数组:
? ? ? ? Person[] personArray = new Person[6];
? ? ? ? personArray[0] = new Person();
? ? ? ? personArray[1] = new Man();
? ? ? ? personArray[2] = new Woman();
多态参数:
? ? ? ? public static void main(String [] args){
????????????????
? ? ? ? }
instanceof运算符
? ? ? ? Person p = new Man()
? ? ? ? if(p instanceof Man) 判断p的引用是否是Man对象类型??主要用来判断一个类是否实现了某个接口,或者判断一个实例对象是否属于一个类。
Object类
? ? ? ? java.lang.Object类是所有类的父类,所有类都默认继承Object类
? ? ? ? 子类可以继承Object类中所有的方法(Object类中没有属性)
? ? ? ? 如果Object中的类对子类不适应,子类可以重写Object类的方法
? ? ? ? equals()? 比较两个引用对象的地址值是否相同
? ? ? ? ==? ? ? ? ? ?比较两个值是否相同
? ? ? ? toString()
static
? ? ? ? 静态属性:
? ? ? ? ? ? ? ? public static String name;
? ? ? ? ? ? ? ? private static int age;
? ? ? ? 静态方法:
? ? ? ? ? ? ? ? public static void say(){}
非静态代码块
? ? ? ? {? ? ?}
? ? ? ? 通常为多个构造器中的共性内容进行初始化
静态代码块
? ? ? ? static {? ? ?}
final 修饰符
? ? ? ? 修饰变量
? ? ? ? 修饰方法
? ? ? ? 修饰类
抽象类、抽象方法
? ? ? ? abstract
接口
? ? ? ? interface
枚举
? ? ? ? enum
包
? ? ? ? package
? ? ? ? import
抽象方法
只声明而不实现的方法
abstract void say();
抽象类
含有抽象方法的类
public abstract class AbstractClass{
abstract void say();
}
接口
[public] interface interfaceName{
}