继承 抽象类 接口

本文详细介绍了Java中的继承机制,包括单继承、访问权限、super关键字的使用、向上转型、动态绑定、方法重写和多态的概念。强调了封装原则和抽象类与接口的应用,展示了如何通过抽象类和接口实现多态性,并讨论了多态带来的优势。
摘要由CSDN通过智能技术生成

一、继承
1.继承的语法规则

    1.使用 extends关键字 指定父类.
    
    2.Java 中一个子类只能继承一个父类 (而C++/Python等语言支持多继承).

    3.子类会继承父类的所有 public 的字段和方法.

    4.对于父类的 private 的字段和方法, 子类中是无法访问的.
   
    5.子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用

2.继承的注意事项

    1.当成员属性或者成员方法被private修饰时,则被修饰的方法或者成员变量不能被子类调用
    
    2.子调用父类方法或者属性时使用super关键字调用

3.Java 中对于字段和方法共有四种访问权限

1.private:只能类内访问

2.(默认)default:包内访问,类内部能访问

3.protected:包内能访问,类内部能访问,子类能访问

4.public:类内部和类的调用者都能访问

4.如何选择访问权限

1.我们希望类要尽量做到 "封装", 即隐藏内部实现细节, 只暴露出必要 的信息给类的调用者

2.因此我们在使用的时候应该尽可能的使用 比较严格 的访问权限. 例如如果一个方法能用 private, 就尽量不要用public.

5.向上转型

class Animal{
	public String name;
	public Animal(String name){
		this.name = name;
	}
	pubilc void eating(String name){
		System.out.println(this.name + "正在吃东西");
	}
}
//继承Animal类
class Bird extends Animal{
	public Bird(String bird){
		super(name);
	}
}
public class test{
	public static void main(String[] args){
		//向上转型
		Animal bird = new Bird("bird");
	}
}

6.什么时候发生向上转型

1.直接赋值

2.方法传参

3.方法返回值

7.动态绑定

在 Java 中, 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为 动态绑定

8.方法重写

1.重写要求返回值相同

2.方法名相同

3.参数的个数和类型相同

4.重写中子类方法的访问权限不能低于父类的访问权限

5.被static修饰的方法不能重写

9.多态

class Shape { 
	public void draw() { 
	 // 啥都不用干
	} 
} 
class Cycle extends Shape { 
 @Override 
	public void draw(){
	 	System.out.println("○"); 
	} 
} 
class Rect extends Shape { 
 @Override 
	public void draw() { 
	System.out.println("□"); 
	} 
} 
class Flower extends Shape { 
 @Override 
	public void draw() { 
	System.out.println("♣"); 
	} 
}
=========================================
public class Test { 
	public static void main(String[] args) { 
		Shape shape1 = new Flower(); 
		Shape shape2 = new Cycle(); 
		Shape shape3 = new Rect(); 
		drawMap(shape1); 
		drawMap(shape2); 
		drawMap(shape3); 
	} 
	 // 打印单个图形
	 public static void drawShape(Shape shape) { 
 		shape.draw();
	} 
}
//多态优点:1.降低类的调用者对类的使用成本
//        2.降低代码的圈复杂度,避免出现太多if-else
//        3.可扩展能力强

10.抽象类

1.什么是抽象类
     没有实际工作的方法, 我们可以把它设计成一个抽象方法(abstract method), 包含抽象方法的类我们称为抽象类(abstract class)

2.语法
abstract class Shape { abstract public void draw(); }
//抽象方法没有具体方法体

3.注意事项
	1.抽象不能直接被实例化
	2.不能被private修饰

4.抽象类的作用
	最大的作用是被子类继承

11.接口

1.什么是接口
	接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法和字段. 而接口中包含的方法都是抽象方法, 字段只能包含静态常量
2.使用 interface 定义一个接口
3.接口中的方法一定是抽象方法, 因此可以省略 abstract
4.接口中的方法一定是 public, 因此可以省略 public
5.Cycle 使用 implements 继承接口. 此时表达的含义不再是 "扩展", 而是 "实现"
6.在调用的时候同样可以创建一个接口的引用, 对应到一个子类的实例.
7.接口不能单独被实例化.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matinal_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值