1)类与对象
类:生活中一些对象共同点的集合、主观的、以人的意识存在的
对象:客观存在的,类的实体
2)面向对象
java是一门面向对象的开发语言,c是面向过程的开发语言,两种编程思想的不同:
生活中一件事 = 对象(执行者) + 过程(执行流程)
面向对象————关注对象(关注事情的执行者) ->>结果不确定(灵活)
面向过程————关注过程(关注事情的执行流程) ->>结果确定(死板)
面向对象三大特性:继承性、多态性、封装性
3)基本语法:
1.一个类对应一个java文件
2.属性(特征)的定义格式:访问权限 类型 属性名;
3.方法(行为)的定义格式:访问权限 返回类型 方法名(参数列表){}
4.创建对象的格式:类名 对象名 = new 类名();
5.调用属性:对象名.属性名
6.调用方法:对象名.方法名(参数)
7.程序入口:public static void main(String[] args){}
代码示例1.1:
package pra01;
public class teacher {
//属性
public String tname;
//方法
public void teach(String sname){
System.out.println(tname + "老师给" + sname + "学生讲课");
}
}
<pre name="code" class="java">package pra01;
public class text {
//入口
public static void main(String[] args){
//创建对象
teacher tc = new teacher();
//调用属性
tc.tname = "Jack";
//调用方法
tc.teach("Tony");
}
}
运行结果:
访问权限:
java的类有2种访问权限,public、默认
而方法和变量有4种:public、默认、protected、private
其中默认访问权限和protected很相似,有着细微的差别。
public意味着任何地方的其他类都能访问
默认则是同一个包的类可以访问。
protected表示同一个包的类可以访问,其他的包的该类的子类也可以访问。
private表示只有自己类能访问
4)构造器(构造方法)
5)方法重载
<span style="white-space:pre"> </span>JButton jb1 = new JButton();
jb1.setText("关机");
与
<span style="white-space:pre"> </span>Button jb1 = new JButton("关机");
对于JButton一个有参,一个无参
同时这也是构造函数的重载,关于JButton的构造函数重载,可由API查得
6)继承(子类和父类)
package pra01;
public class human {
//父类属性
String sex;
String name;
//父类
public void eat(){
System.out.println("Human beings need to eat");
}
}
package pra01;
public class chef extends human{
//子类自己的方法
void cook (){
System.out.println("厨师可以烹饪");
}
}
package pra01;
public class text {
//入口
public static void main(String[] args){
//创建子类对象
chef a = new chef();
//调用继承来的属性name和sex
a.name = "Tom";
a.sex = "male";
//调用继承来的方法
a.eat();
//调用子类自己的方法
a.cook();
}
}
运行结果:
7)方法重写
package pra01;
public class chef extends human{
//子类额外方法
void cook (){
System.out.println("厨师可以烹饪");
}
public void eat(){
System.out.println("chefs are the master of eating");
}
}
运行结果:
重写后输出结果为重写后的eat方法
8)转型:父类引用指向子类引用
得:上转型对象可以操作和使用子类继承或者重写的方法。
失:上转型对象丧失了对子类新增成员变量或新增的方法的操作和使用。
2)与向上转型相反,即是把父类对象转为子类对象:作用也与上转相反。向下转型需要用到强制类型转换。
向上转型代码举例:
human a = new chef();<span style="white-space:pre"> </span>//向上转型,
a.eat(); <span style="white-space:pre"> </span>//调用父类eat方法,a遗失chef类方法cook
则,调用eat方法时,结果为重写后的
9)多态
1)要有继承
2)要有重写
3)父类引用指向子类对象
多态的好处:
1.可替换性。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
class A ...{
public String show(D obj)...{
return ("A and D");
}
public String show(A obj)...{
return ("A and A");
}
}
class B extends A...{
public String show(B obj)...{
return ("B and B");
}
public String show(A obj)...{
return ("B and A");
}
}
class C extends B...{}
class D extends B...{}
问题:以下输出结果是什么?
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b)); ①
System.out.println(a1.show(c)); ②
System.out.println(a1.show(d)); ③
System.out.println(a2.show(b)); ④
System.out.println(a2.show(c)); ⑤
System.out.println(a2.show(d)); ⑥
System.out.println(b.show(b)); ⑦
System.out.println(b.show(c)); ⑧
System.out.println(b.show(d)); ⑨
分析:
a1是A类的一个对象,包含的方法为show(A)、show(D)
b是B类的一个对象,包含的方法为重写后的show(A)、show(B)、show(D)
a2是B类向上A类转型,没有重写,所以遗失了自身的show(B)函数,
重写了show(A),包含的方法为重写后的show(A)、show(D)
c是C类的一个对象,包含的方法为重写后的show(A)、show(B)、show(D)
d是D类的一个对象,包含的方法为重写后的show(A)、show(B)、show(D)
① A and A
② A and A
③ A and D
④ B and A
⑤ B and A
⑥ A and D
⑦ B and B
⑧ B and B
⑨ A and D
10)当前类对象this
package pra01;
public class A {
int i = 10;
void a1(){
System.out.print("这是a1");
}
void a2(){
a1();
System.out.print(i);
}
}
上边这个例子 a2()里调用a1()和i的时候一般都是这么写的, 可以实际上前边都是的有this的, 只不过是没写出来罢了, 上边的例子本来应该是
package pra01;
public class A {
int i = 10;
void a1(){
System.out.print("这是a1");
}
void a2(){
this.a1();
System.out.print(this.i);
}
}