⭐⭐⭐Java基础篇目录⭐⭐⭐
🍁 第一章 Java开发环境搭建
🍁 第二章 标识符与关键字
🍁 第三章 变量
🍁 第四章 数据类型
🍁 第五章 运算符
🍁 第六章 控制语句
🍁 第七章 方法
🍁 第八章 认识面向对象
🍁 第九章 对象的创建和使用
🍁 第十章 封装
🍁 第十一章 this和static
🍁 第十二章 继承
🍁 第十三章 方法的覆盖和多态
🍁 第十四章 super
😉
1、继承
继承(Inheritance),关键字extend。可继承父类除构造方法以外的代码,私有的也可以继承,只是在子类中无法直接访问。继承可以解决代码的臃肿,提高了代码的复用性。
继承的作用:
- 基本作用:
子类继承父类,代码可以得到复用 - 主要作用:
因为有了继承关系,才有了后期的方法覆盖和多态机制。
2、继承的特性
- B类继承A类,则A类称父类、基类、超类,B类称子类、派生类、扩展类
class A{
}
class B extends A{
}
- java中只支持单继承、不支持多继承(C++支持多继承),即不允许一子多父,但可以一父多子
//不允许的
class B extends A,C{
}
//不能一子多父,但可以有父、有爷爷
class X{
}
class Y extends X{
}
//Z直接继承了Y,间接继承了X
class Z extends Y{
}
- Java中规定,除构造方法不能继承之外,剩下的都可继承,但私有属性无法在子类中直接访问,只能间接,如get
- Java中没有显示继承任何类,则默认继承Object类,Object类是Java中的根类(老祖宗类),即一个对象与生俱来就有Object类型中的所有特征
……/jdk18/lib/src/java.base/java/lang/Object.java
class X{
}
等价于
class X extends Object{
}
//Object类是所有类的父类
- 继承也会存在一些缺点,如CreditAccount类继承了Account类会导致他们之间的耦合度非常高,Account类发生改变会立马影响到CreditAccount类
3、继承的理解
子类继承父类,可以理解成是将父类中的代码隐形copy一份到子类体中,形象的比喻就是儿子从他父亲那里继承了100W,这100W爱咋花咋花。
class Animal{
//赋予name属性一个默认值
String name = "tiger";
public void move(){
System.out.println(name+"正在移动");
}
}
/**
* 子类
*/
class Cat extends Animal{
}
public class ExtendsTest {
public static void main(String[] args) {
Cat c = new Cat();
c.move();
}
}
什么时候使用继承?
凡是采用" is a "能描述的
,都可以用继承,如Cat is a Animal,Creditaccount is a Account.
4、Object类
Java内置了一套庞大的类库,我们可以在此基础上进行二次开发,此内置的库实现了很多功能,如string是SUN编写的字符串类,System是SUN编写的系统类……
关于System.out.println();的理解
System是类名,out后无小括号,推测是变量
--->
能类名.,说明out变量是静态变量
--->
System.out返回了一个对象,这个对象调用了println()方法
这里涉及静态变量与new 对象的第一次组合,不奇怪,反正就存个对象的地址,是个变量就好。int i=100;和static int i =100;存变量i,无非是存储位置的不同、
public class SystemTest {
static Student stu = new Student();
public static void main(String[] args) {
//类名.静态变量返回一个对象(引用)
//可以理解成Student s = SystemTest.stu;再s.exam();
SystemTest.stu.exam();
}
}
class Student{
public void exam(){
System.out.println("exam");
}
}
😉
查看Java中JDK下的源码时,当一个方法以;结尾,并且修饰符列表中有native关键字,表示其底层调用了C++写的dll程序(dll即动态链接库文件)
toString方法源码
public String toString(){
return getClass().getName()+"@"+Integer.toHexString(hashcode());
}
toString的简单测试
public class Test1 {
public static void main(String[] args) {
Test1 t = new Test1();
System.out.println(t.toString());
System.out.println(t);
}
}
@后面的字符串,可等同看作时对象在堆内存中的内存地址,实际上是内存地址经过哈希算法得出的十六进制结果。
😉
直接输出一个引用的时候,println()方法会自动调用引用的toString()方法,然后输出toString()方法的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146121.html