New 内存分配运算符
构造器不算作成员方法
首地址 首元素存放的地址
Initialized 初始化
匿名对象 结束此行就找不到 例如 new student();
修饰抽象类的关键词只有 public abstract final
Ststic只能修饰抽象类的成员 或者修饰内部抽象类
Overload 重载 or override 重写?
函数重写
具有继承关系的父子类中
函数名相同
形参列表相同
函数体不同
函数重载
在同一类中
函数名相同
形参列表不同 形参个数不同 形参类型一一对应
思考题: 函数重写与返回值类型的关系
基本数据类型作为返回值类型时:子类函数的返回值类型必须与父类返回值类型相同
引用数据类型作为返回值类型时:子类函数的返回值类型 必须小于等于 父类的返回值类型
父类中的static成员函数不能被重写
继承 IS关系 单向is关系
当有类A和类B ,满足
1)A B属于同种类
2)A is B,B is not A(Dog is animal, Dog is not animal 单向is继承关系 A 是父类 B 是子类
在同一范围内AB类型相同
多态
基于继承
一个事物的多种表现形式
多态存在的三个必要的条件
* 要有继承,或实现
* 要有重写
* 父类引用指向子类对象
在Java中
1)父类引用 指向 子类对象-----多类的一种表现形式 父类只能用父子类共有的属性和方法 不能调用子类特有的属性和方法 只能使用内存上半截
Father f2 = new son;
2)函数重写 override (重载是不是多态 是有争议的)
3)接口
instanceof 判断某一个对象是否是某种类型的
Animal s = new Dog();
if(s instanceof Cat) {//判断某一个对象是否是某种类型的
Cat j = (Cat)s;
}
多态的优点
1)简化代码
2)改善代码的组织性和可读性
3)易于扩展
封装 对数据(成员属性 局部变量)的保护 -------{}
访问权限控制 是用来控制 封装的强弱 ----private public
Text1 t; 没有加载 只是到字节码文件中确认有没有text1 字节码文件
Text t = new text(); 有加载
Text t = new text();
当子类与父类有同名的属性时 不能被覆盖 是有两个相同名字的属性
因为成员属性没有重写
public class TextFather {
public static void main(String[] args) {
Father f = new Father();
Son2 s = new Son2();
Father f2 = new Son2();
f2.text_Father2();//运行结果 Father 静态成员方法
//static 修饰方法不能重写
f2.text_Father();//运行结果 son 非静态成员方法
System.out.println(f2.y);//运行结果为 Father f2运行的是父类里的属性 不能运行子类里的属性
}
}
class Father {
String y = "Father";
public void text_Father() {
System.out.println("Father 非静态成员方法");
}
static void text_Father2() {
System.out.println("Father 静态成员方法");
}
}
class Son2 extends Father {
String y = "son";
int age;
@Override
public void text_Father() {
System.out.println("son 非静态成员方法");
}
static void text_Father2() {
System.out.println("son 静态成员方法");
}
}
完全限定名 带包的类名 例如:com.edu.class
父类指向子类类性的意义
接口
特殊的抽象类 当一个抽象类里的所有成员方法都是抽象方法 称此类为接口
用interface定义接口 接口关键字
实现接口关键字 implements
接口中的内容
1.常量 固定修饰符public static final 常量名定义规范所有字母大写
2.抽象方法 : 固定修饰符public abstract
3.默认方法:default 修饰(JDK8之后) 默认用public修饰
如果一个类实现了此接口 而且不想成为抽象类 就必须重写接口中的抽象方法 保证子类所有的函数访问权限都是public
final:(最终 断子绝孙关键字)
被他修饰的类不能被继承
被他修饰的方法不能重写
被他修饰的属性是常量 不能再被赋值
切记:final修饰的变量叫做最终变量
public static final 联合修饰的才能叫做常量
接口和抽象类的区别?
(1)抽象类可以有构造方法,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含静态方法,接口中不能包含静态方法
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承
(6) 接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
类 extends 类 只能继承一个类
接口 extends 接口 可以同时继承多个接口
类 implements 接口 可以同时实现多个接口
抽象类引用可以指向其子类对象 animal a = new dog();
接口引用可以指向其子类对象(不能是抽象类) shengwu s = new dog();
接口的出现解决了java的单继承
一个类可以同时实现多个接口 实现多个接口可以用逗号,
同一个java文件只能有一个接口可以用public修饰
public abstract class Animal implements Shengwu,S,Sh {
String type;
public abstract void shout() ;
public void eat() {
System.out.println("饿饿饿饿饿饿饿饿饿");
}
public abstract void sleep();
}
一个类必须先继承再实现
public class Dog extends Animal implements IZuZong{
public void huxi() {
}
public void shout() {
System.out.println("汪汪~~~");
}
public void play() {
System.out.println("球!!!!!!!");
}
public void sleep() {
System.out.println("闭着眼睛睡觉");
}
}
JDK8.0开始
接口中默认函数:不可用abstract static private修饰final
默认函数 也可被实现此接口的子类重写 Override
作用:实现此接口中的子类使用,接口本身不可用此函数
默认函数定义语法:
public default 返回值类型 函数名 (形参列表) {
//函数体
}