多态 接口和抽象类区别

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 返回值类型 函数名 (形参列表) {

//函数体

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值