| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> Java知识库 -> java对象 -> 正文阅读 |
|
|
[Java知识库]java对象 |
对象面向对象编程 本质 以类的方式组织代码,以对象的组织(封装)数据 抽象(将像的部分抽离出来) 三大特性 封装 该露的露,该藏的藏 "高内聚,低耦合",高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用 1,提高程序的安全性,保护数据 2,隐藏代码是实现过程 属性私有,get/set public class Demo7 {
?private int id;
?
? // 获得这个数据
? ?public int getId() {
? ? ? ?return id;
? }
? // 设置这个数据
? ?public void setId(int id) {
? ? ? ?this.id = id;
? }
?
? ?public static void main(String[] args) {
? ? ? ?Demo7 demo7=new Demo7();
? ? ? ?demo7.setId(72);
? ? ? ?System.out.print(demo7.getId());
? }
}
?
继承(如:直角三角形继承于三角形,前者是后者的子类) 本质是对某一类的抽象,从而实现对现实世界更好的建模 1,子类继承父类就有了父类的所有方法 2,java中所有的类都默认继承Object类 3,java中只有单继承没有多继承 父类只能有一个,子类可以有多个 4,私有的属性无法被继承 extends 继承 super public class person{
? ?public String name="opq";
? ?public void f(){
? ? ? ?
? }
}
?
class student extends person{
? ?public String name="waz";
? ?public void f(){
? ? ? ?this.name;//子类的name=waz
? ? ? ?super.name;//父类的name=opq
? }
? ?public void k(){
? ? ? ?this.f();//子类的方法
? ? ? ?super.f();//父类的方法
? } ?
}
当子类实例化运行时,会调用父类默认的方法
? ?super();在子类中一般被隐藏了指的的 super.person();
调用父类的构造器必须要在子类的第一行
? ?当父类为有参构造时,子类的构造器也必须为有参构造
super的注意点
this 区别 this:本身调用者这个对象 super:代表父类对象的应用 前提 this:没有继承也可以使用 super:必须继承后才能使用 构造方法 this(); 子类的构造方法 super(); 父类的构造方法 方法的重写 重写都是方法的重写,与属性无关 public class A{
? ?@Override ?//重写
? ?public void test(){
? ? ? ?super.test();
? }
?
}
public class B extends A{
? ?public void test(){
? ? ? ?
? }
}
public static void main(String[] args) {
? ? //静态方法:调用只和左边,定义的数据类型有关
? ? //非静态方法;重写
? ? A a=new A();
? ? a.test();//A
? ? //父类的引用指向了子类
? ? B b=new A();
? ? b.test();//非静态为A,静态为B
? ?
}
重写:需要有继承关系,子类重写父类的方法 重写:子类的方法和父类必须相同:方法体不同
为什么要重写
多态(同一种事物会有多种形态,每种形态都不一样) 认识角度,先有对象后有类 代码角度,先有类后有对象 多态存在条件
一个对象的实际类型是确定的,但可以指向的引用类型不确定了:父类的引用指向子类 public class ?person{
? ?
}
public class ?student extends person{
? ?
}
public static void main(String[] args)
{ ?
? ? //一个对象的实际类型是确定的
? ?new student();
? ?new person();
? ?//指向的引用类型不确定:父类的引用指向子类
? ?//student 能调用的方法都是自己的或者继承父类的
? ?student s1=new student();
? ?//person 父类型,可以指向子类,但是不能调用子类独有的方法
? ?person s2=new student();
? ?object s3=new student();
}
总结:编译,看左边;运行,看右边
多态注意事项
无法重写的情况
instanceof 判断类的类型是否相似 public class ?person{
? ?
}
public class ?student extends person{
? ?public void go(){
? ? ? ?
? }
}
public class ?teacher extends person{
? ?
}
public static void main(String[] args)
{ ?
? ?// Object>person>studnet
? ?//Object>person>teacher
? ?Object o=new student();
? ?System.out.print(o instanceof person); true
? ?System.out.print(o instanceof student); true
? ?System.out.print(o instanceof object); ? true
? ?System.out.print(o instanceof teacher); ?flase
}
总结 ?System.out.print(A instanceof B);/当A与B有关系时,编写通过,否则,编译不通过
类型的转换 ?父 ? ?子
高 ? ? ? ?低
? ?//父类转换为子类时,才能调用子类独有的方法
? ?person ?p=new studnet();
? ? student s=(student) p;
s.go();
低 ? ? ?高
? ?//子类转换为父类可能会丢失自己本来的一些方法
? ?student s=new studnet();
? ?person p=s;
?
public class person{
? ?//2
? {
? ? ? System.out.print("匿名代码块");
? }
? ?//1最先执行 只会执行一次 跟着类一起执行
?static{
? ? ? ? ?System.out.print("静态代码块");
? ? }
? ?//3
? ?public person(){
? ? ? ?System.out.print("构造方法")
? }
}
?
抽象类 abstract 抽象类 单继承 extends //abstract 抽象方法,只有方法名字,没有方法的实现 public abstract void doSomething(); 1,不能new这个抽象类,只能靠子类去实现它:约束 2,抽象类中可以写普通的方法 3,抽象方法必须写在抽象类中 抽象类可以提高开发效率 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年10日历 | -2025/10/24 8:03:35- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |