Java基础扫盲
Posted Z|Star
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础扫盲相关的知识,希望对你有一定的参考价值。
本篇博文针对有其它编程语言基础,但未接触Java的读者。读完本篇博文,能够对Java面向对象的特性有个基本认识,基本掌握Java语法,看懂相关代码。
包名取名规范
包名=域名反向
例如:
域名:www.baidu.com
包名:com.baidu
方法的重载
重载:在一个类中,有相同的函数名称,但形参不同的函数。
形参不同,可以是数量不同,或者类型不同。
例如:
public static int max(int num1, int num2){...}
public static int max(int num1, int num2, int num3){...}
public static double max(double num1, double num2, double num3){...}
构造器
构造器作用,给New出的对象进行初始赋值。
无参构造
定义一个类Person
public class Person {
public Person() {
}
}
和类名相同的Person()就是无参构造。
有了无参构造之后,可以在main函数中new出对象。
Person person = new Person();
有参构造
public class Person {
String name;
public Person() {
}
public Person(String name){
this.name = name;
}
}
这里在Person的构造中传递了参数name,于是在main中可以传递进具体的name。
public class Main {
public static void main(String[] args) {
Person person = new Person("zstar");
System.out.println(person.name);
}
}
注:有参构造必须存在空的无参构造,否则会报错。
封装
想象一台电视机,用户不能直接操纵内部的电路,但是却能够通过外面的按钮来间接的控制内部电路的变化。
封装就是同样的道理,内部的电路就是属性私有private,外部的按钮就是public方法。
重新修改Person类:
public class Person {
private String name;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在这个Person类中,name前加了private关键字,这代表着只有类的内部可以通过.name的方式来修改name。不加关键字则默认default,外部可以直接对它进行操作。
getName 和 setName 为两个public方法,外部可以直接调用这两个方法来实现目的。
进行测试:
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("zstar");
System.out.println(person.getName());
}
}
意义:现在外部无法对内部的属性进行操作,保证了数据的安全性,方法内可以添加添加来对用户的输入进行限制。
注:Alt+INSENT 快捷键可以快速建立这两个方法。
继承
关键词:extends
保持上面的Person类不变,新建一个类Son。
public class Son extends Person {
}
再修改测试代码:
public class Main {
public static void main(String[] args) {
Son son = new Son();
son.setName("zstar");
System.out.println(son.getName());
}
}
实例化的是Son这个对象,发现Son继承Person类后能够使用Person类的所有方法。
注:ctrl + H 可以查看当前类的继承树,一个类只能直接继承另一个类,所有的类都继承Object这个类。
关键词:super
通过super,可以在子类中调用父类的属性或方法。
给Person类新增一个方法:
public void print(){
System.out.println("我是爹");
}
修改Son类:
public class Son extends Person {
public void print(){
System.out.println("我是儿子");
}
public void test(){
this.print();
super.print();
}
}
测试:
public class Main {
public static void main(String[] args) {
Son son = new Son();
son.test();
}
}
测试结果:
通过这个例子,可以发现,this.print调用了子类中的print方法,而super.print调用了父类中的方法。
注:父类中私有的private属性或方法被继承后无法访问,super调用父类的构造方法,必须在构造方法的第一个。
方法重写
当子类和父类有相同的方法(方法名一样,参数一样)时,可以在子类的方法上加上注解@override,对该方法进行重写,创建的对象均使用子类的方法。
多态
多态:同一方法可以根据发送对象的不同而采用多种不同的行为方式。
如果两个对象存在继承关系,可以进行对象的转换。
比如,Son 继承 Person
Son a = new Son();
Person b = new Son();
但父类不能直接调用子类的方法,可以通过强制转换实现。
((Son) b).方法
抽象类
如果遇到这种情况,想写一个类,但里面具体的方法没有想好怎么写,这时候就可以用到抽象类,使用关键词abstract。
例如,将Person()变成一个抽象类
public abstract class Person {
public abstract void method();
}
如果Son类继承Person,那么Son必须重写父类中的抽象方法。
public class Son extends Person {
@Override
public void method() {
}
}
父债子偿!
接口
Java中一个类只能继承一个类,如果有多个抽象类需要继承,那么就需要用到接口。
接口:约束和实现分离。
接口的意义:架构师可以将各种需要的功能设计出来,相当于搭建一个脚手架,使用接口interface给码农,码农写接口实现类,相当于干刷墙,搬砖这种具体活。
以上是关于Java基础扫盲的主要内容,如果未能解决你的问题,请参考以下文章