java继承和多态-小羊的记录本

继承和多态

继承

1.继承是2个类之间的一种关系,用extends关键字实现,被继承的类叫做父类(超类),继承的类叫做子类;
2.子类从父类继承所有的非private的属性和方法;
3.一个父类可以拥有很多个子类;
4.单重继承:一个父类
多重继承:多个父类(Java只支持单重继承,用接口实现多重继承的思想)
5.继承的好处:提高程序的抽象程度,接近人类的思维方式;程序结构更加清晰,降低编码和维护的工作量
6.为什么要继承?什么时候用到继承?实现了代码复用,避免重复代码;多个类有相同的特征(属性)和行为(方法),把这些内容抽象到一个父类中,其他的类无需重新定义,只需要继承即可。因此父类更通用,子类更具体。
7.方法重写?子类中重写父类的方法
8.super:在子类的构造方法中,用super调用父类的构造函数(必须是构造函方法的第一条语句);如果子类重写了父类的方法,通过super调用父类的方法
9.创建对象时,先创建父类对象,在创建子类对象。如果没有显示调用父类的构造方法,将自动调用父类的无参构造方法。
10.一切类的老大是Object类:java.lang.Object;Object类到底实现了哪些方法?(华为面试题)

  • clone:保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
  • getClass:获取运行时类型
  • toString:用的很多,一般子类都会覆盖
  • finalize:释放资源,很少用
  • equals:一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
  • hashCode:用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
    一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
  • wait:使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
  • notify:唤醒在该对象上等待的某个线程。
  • notifyAll:唤醒在该对象上等待的所有线程。

多态

1.多态是一个程序中同名的不同方法
2.多态分为重载(编译时多态)和动态绑定的覆盖/接口实现(运行时多态);
3.多态的好处:提高程序的灵活性和可扩展性,代码更简洁;
4.多态存在的必要条件:要有继承;要有重写;父类引用指向子类对象(向上转型)
5.多态的实现方式:继承父类进行方法覆盖;同一个类中方法重载;接口实现(实现其方法)
在这里插入图片描述

  • 方法的继承:继承父类非私有成员;
  • 方法的覆盖:子类中的和父类相同的方法,默认调用子类自己的方法,除非加super关键字;
  • 方法的重载:同名方法重新定义,通过参数列表(类型 顺序 数目)区分;
    public float setarea(){}
    public float setarea(float a){}
    

6.this:
在这里插入图片描述
super:
在这里插入图片描述
7.static:
8.abstract:
- 抽象类,没有具体实例对象的类,用来实现类之间的继承关系;
- 抽象方法:只有方法头,没有具体的方法体,方法体的实现由当前类的不同子类在各自的类中完成,抽象方法只能存在于抽象类中;
- 两者关系:抽象类可以有0个或者多个抽象方法,也可以包含非抽象的方法;抽象类中可以没有抽象方法,但是有抽象方法的一定是抽象类;抽象类派生的子类必须实现抽象类中定义的所有抽象方法

	abstract class Shapes{
		protected double circumference;
		protected double area;
		
		abstract void setCircumference();
		abstract void setArea();
	}
	public class Circle extends Shapes{
		protected int radius;
		static final double pi=3.14;
		//重写
		public void setCircumference(){
			circumference=2*pi*radius;
		}
		//重写
		public void setArea(){
			area=pi*radius*radius;
		}
	}

9.final:

  • 最终类:不能被继承
  • 最终属性:不能被改变,为节省空间,常量还会声明为static
  • 最终方法:不能被当前类的子类重写覆盖
    final class C1{
    	int i;
    	public void print(){
    		System.out.println("i="+i);
    	}
    }
    

10.volatile:
可以同时被几个线程所控制和修改
11.synchronized:同步方法修饰符
多线程共存的程序中同步
在这里插入图片描述
12.修饰符混合使用
在这里插入图片描述
13.接口:由抽象方法和常量组成的特殊体(类似多重继承),关键字interface

  • 接口也有继承性,用extends声明,一个接口可以有一个以上的父接口,之间用逗号分隔(区别于继承)
  • 接口只是定义对外的接口和规范,并没有实现其功能,功能室靠实现该接口的类重写抽象方法
  • 接口中的属性必须是public static final,方法必须是默认的public abstract
    在这里插入图片描述
    在这里插入图片描述
  • 接口实现多态
    List 接口的两个实现类,ArrayList,LinkedList。
public class ListStudy {
    public static void main(String args[]) {
        List<String> list = new ArrayList<>();
        List<String> list1 = new LinkedList<>();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值