
java 05JDK中的主要包导入类 import面向对象的三大特征继承Object类方法重写overridefinal关键字组合IDEA 快捷键equals方法的重写super
JDK中的主要包
java.lang:包含一些java语言的核心类
java.awt:包含了构成抽象窗口工具集
java.net:执行与网络相关的 *** 作的类
java.io:提供多个输入/输出功能的类
java.util:包含一些实用工具类
导入类 import
java中会默认导入java.lang包下的所有类,因为这些类我们可以直接使用
如果导入两个同名的类,只能用包名加类名来显示调用相关类
import.java.util.*:导入该包下的所有类,会降低编译速度,但不会降低运行速度
静态导入:其作用是用于导入指定类的静态属性和静态方法
面向对象的三大特征
继承
封装
多态
继承
作用:
代码复用,更加容易实现类的扩展
方便建模
实现:extends子类是父类的扩展
public class TestExtends {
public static void main(String[] args) {
Student s1 = new Student("x",160,"java");
System.out.println(s1 instanceof Student);//true
System.out.println(s1 instanceof Person );//true
}
}
class Person {
String name;
int height;
public void rest(){
System.out.println("休息!");
}
}
class Student extends Person{
// String name;
// int height;
String major;
// public void rest(){
// System.out.println("休息!");
// }
public void study(){
System.out.println("学习!");
rest();
System.out.println(this.name);
}
public Student(String name, int height, String major){
this.name = name;
this.height = height;
this.major = major;
}
}
class Boy extends Person{
}
注:instanceof是二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建的对象时,返回true
java中只有单继承
Java中类没有多继承,接口有多继承
子类继承父类,可以继承父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)
如果定义一个类时,没有调用extends,则它的父类是java.lang.Object
Object类
所有类都是Object类的子类,也都具有Object类的特性
如果类的声明中未使用extends类,则默认继承Object类
public class TestObject extends Object {
String name;
String pwd;
@Override
public String toString() {
return "账户名:"+name+"密码:"+pwd;
}
public static void main(String[] args) {
TestObject to = new TestObject();
System.out.println(to.toString());
TestObject to3 = new TestObject();
System.out.println(to3.toString());
}
}
方法重写override
override和overload无关!
子类重写父类的方法,可用自身行为替换父类行为。重写是实现多态的必要条件。
方法重写的三个要点:
方法名、形参列表相同
返回值类型和声明异常类型,子类小于等于父类
访问权限,子类大于等于父类
public class TestOverride {
public static void main(String[] args) {
Horse h = new Horse();
h.run();
h.getVehicle();
Plane p = new Plane();
p.run();
}
}
class Vehicle{//交通工具类
public void run(){
System.out.println("跑……");
}
public Vehicle getVehicle(){
System.out.println("给你一个交通工具");
return null;
}
}
class Horse extends Vehicle{
@Override//覆盖
public void run() {
super.run();
System.out.println("de de de");
}
@Override
public Horse getVehicle() {
return new Horse();
}
}
class Plane extends Vehicle{
@Override
public void run() {
System.out.println("fei fei fei");
}
}
final关键字
修饰变量:一旦赋初值,就不能被重新赋值
修饰方法:该方法不可被子类重写。但是可以被重载
修饰类:修饰的类不能被继承
组合
将父类对象作为子类的属性
组合比较灵活,继承只能有一个父类,但组合可以有多个属性
is a 使用继承;has a使用组合
public class TestComponent {
}
class Person2 {
String name;
int height;
public void rest(){
System.out.println("休息!");
}
}
class Student2 {
Person2 person2 = new Person2();//组合
String major;
public void study(){
System.out.println("学习!");
person2.rest();
System.out.println(this.person2.name);
}
public Student2(String name, int height, String major){
this.person2.name = name;
this.person2.height = height;
this.major = major;
}
}
class Boy2 extends Person2{
}
IDEA 快捷键
类的结构视图:alt+7
看类的源码:ctrl+左键
自动生成构造器get,set.equals等:alt+insert
查看错误:alt+enter
main :public static void main(String[] args) {……}
sout:System.out.println();
soutm:System.out.println(“描述所在类中的所在方法”);
”==“代表双方是否相同
equals()提供“对象内容相等”的逻辑
equals()默认是比较两对象的hashcode。但是可以根据自己要求重写equals方法
super
可以看做是直接父类对象的引用,可通过super来访问父类中被子类覆盖的方法和属性
在一个类中,若是构造方法的第一行没有调用super()或者this(),那么java就会默认调用super()含义是调用父类的无参构造
静态初始化块调用顺序与构造方法调用顺序相同
public class TestSuper {
public static void main(String[] args) {
new ChildClass().f();
}
}
class FatherClass{
public int value;
public void f(){
value = 100;
System.out.println("FatherClass.vale"+value);//soutm
}
}
class ChildClass extends FatherClass{
public int value;
public int age;
public void f(){
super.f();//调用父类的普通方法
value = 200;
System.out.println("ChildClass.value"+value);
System.out.println(value);
System.out.println(super.value);//调用父类的成员变量
}
public void f2(){
System.out.println(age);
}
}
public class TestSuper02 {
public static void main(String[] args) {
new ChildClass2();
}
}
class FatherClass2{
static {
System.out.println("jing tai father");
}
public FatherClass2(){
System.out.println("创建fatherclass2");
}
}
class ChildClass2 extends FatherClass2{
static {
System.out.println("静态初始块:ChildClass");
}
public ChildClass2(){
//super();//编译器自动加入
System.out.println("创建childclass2");
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)