个人java学习路线-封装,继承,多态,接口

先说说抽象

抽象见名知意。
百度百科上抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
java中常见的是抽象类和抽象方法。
这个有啥用呢?
正如类是对象的模板,也可以简单的认为抽象类是类的模板,抽象方法是方法的模板。
抽象的关键词是abstract
抽象类,抽象方法:

public abstract class Person {
    public abstract void eat();
}

抽象类中有无抽象/普通方法都可以,但普通类里不能有抽象方法。
关于抽象类的实现在继承最后再说说。

一,封装

封装,最重要的记住属性私有化就行。

class Person{
	private String name;
	private int age;
	public void tell(){
		System.out.println("hehehhe");
	}
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}
}

private就是私有的意思,私有化的属性外部无法访问,但是可以通过类似getName和setName的方法取得name的值或者为name赋值。这样可以更安全的保护一个类的内部属性。

二,继承

1.什么是继承,继承怎么用

如果说封装的目的是保护数据,那么继承的目的就是为了类的复用,但是在Java中,只允许类的单继承,不支持多继承,作为补充接口可以当多继承用。
1》继承:顾名思义,子继承父,继承是类的继承,子类可以通过继承获得父类的属性和方法,子类也可以扩展父类的属性和方法.
格式:
class 父类{}
class 子类 extends 父类{}
在这里插入图片描述

2.this和super

一》
this;
在idea自动生成的setter方法中自带就有this

	public void setName(String name){
		this.name = name;
	}

this
可以表示类中的属性,
也可以通过this调用本类的构造方法,
this用的最多的应该还是指当前对象。
ps:this在调用构造方法时:
1.用在实例方法中代表当前对象(this.)
2.用在构造方法中,通过b构造方法调用a构造方法(this())
3.不会产生新的对象,但必须写在第一行
二》
super:
从子类调用父类中的构造方法,普通方法,属性。
在调用构造方法时,也必须放在首行。
三》
关于在调用构造方法时this和super的一些说明
1.this和super都必须写在第一行,所以只能用一种方法调用父类构造方法
2.如果两个都没写默认调用super(),一旦写了任意一个,因为不能同时存在两个,所以默认的super()会消失。
四》
其他还有this虽然适用性比super大,但也有一些情况只能用super()

3.抽象类的实现

都忘了这个了…
子类继承抽象类后,重写/实现抽象类中的抽象方法就行
需注意的是:
普通类不能有抽象方法,
抽象类中,普通方法,抽象方法有无都行,
抽象类继承抽象类时,可以不实现抽象方法,
普通类继承抽象类时,必须实现抽象方法。

三,多态

1.多态语法

多态很重要(能写下来的哪个不重要.jpg),在java中主要有两个体现
一.方法的重载和复写
二.对象的多态性
重载和复写早就接触过了,对象的多态才是重点,对象的多态也有两个类型
1.向上转型:子类对象—》父类对象
2.向下转型:父类对象—》子类对象

1》向上转型:
比如有个宠物类Pet,和继承Pet的子类Dog类,那么在创建Dog对象时就可以这么写
Pet pet2=new Dog();
可见,向上转型是可以自动转型的,至于为什么可以这么写,这就有关jvm的编译原理了,感兴趣自行深入。
2》向下转型:
与向上转型不同,向下转型必须强制转换,因为子类一定包含父类的属性方法,而父类不一定包含子类,那么向下转型就有可能出异常,所以只能手动强转,在强转的时候也有必要对父类进行判断,这时就要用到 instanceof方法了,例:
a instanceof b;a是不是b类
返回值为Boolean
一般向下转型的写法:

Pet pet2=new Dog();
if( pet2 instanceof Dog){
	Dog dog=(Dog)pet2;
}

2.多态作用

需注意的是向上转型后只能用父类的方法,而想用子类的方法,必须还要向下转型回来,那么多态有什么用呢:很有用,以后就知道了…(多态最大的用途在于对设计和架构的复用,后面和接口等等组合使用时就能看出这个的重要了)

四,接口

接口的定义

特别重要的概念,是一个特殊的类,里面全是全局变量和公共的抽象方法组成,接口也可以看出一个规范,我们很多时候都是面向接口编程。
格式:

interface 接口名称{
	全局变量;
	抽象方法;
}

例:

interface A{
	public static final double PI=3.14;
	public abstract void print();
	public abstract String getInfo();
}

接口中因为都是全局变量和公共的抽象方法,所以可以简化

interface A{
	double PI=3.14;
	pvoid print();
    String getInfo();
}

都是一个意思

接口的实现

和类的继承不一样,接口是由子类来实现(implements)的,而且子类可以实现多个接口。
class 子类 implements 接口 A,接口 B,…{
}
注意:子类实现接口就必须实现接口中的所有抽象方法

总结

继承,多态,接口思想

1>继承:
is a;
cat is an animal;
is a “继承关系”
A extends B;

2>多态
has a;
i has a pen;
“关联关系”,通常以"属性"存在(夫妻例子);
A{
B b;
}
3>接口
like a;
cook like a foodmenu;
“实现关系”,类实现接口;
A implements B;

接口和抽象对比

抽象是半抽象的
接口是完全抽象的

抽象类中有构造方法
接口中没有

接口和接口之间支持多继承
类和类之间只能单继承

一个类可以同时实现多个接口
一个抽象类只能继承一个类(单继承)

接口中只有常量和抽象方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值